2025-07-06 17:13:58 +01:00

38 lines
1.0 KiB
C++

#include "../rng.h"
#include "./rngtest.h"
namespace splat {
class runs_test : public RNGTEST {
public:
runs_test(std::vector<std::bitset<32>> &testData) : RNGTEST(testData) {
testPValue = runTest(data);
testPassed = testPValue > 0.01;
}
std::string getName() override {
return "Runs";
}
double runTest(std::vector<std::bitset<32>> &data) override {
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))
);
}
};
}