2025-07-07 10:27:51 +01:00

39 lines
893 B
C++

#include "../rng.h"
#include "./rngtest.h"
#include "./runs.h"
namespace splat {
runs_test::runs_test(std::vector<std::bitset<32>> &testData) : RNGTEST(testData) {
testPValue = runTest(data);
testPassed = testPValue > 0.01;
}
std::string runs_test::getName(){
return "Runs";
}
double runs_test::runTest(std::vector<std::bitset<32>> &data) {
long long totalSize = data.size() * 32;
double vnobs = 1;
double onesproportion = 0;
for(int i=0; i<totalSize-1; i++){
if(data[i/32][i%32]!=data[(i+1)/32][(i+1)%32]){
vnobs++;
}
onesproportion+=data[i/32][i%32];
}
onesproportion/=totalSize;
return std::erfc(
std::abs(vnobs-(2*totalSize*onesproportion*(1-onesproportion)))
/
(2*std::sqrt(2*totalSize)*onesproportion*(1-onesproportion))
);
}
}