38 lines
1.0 KiB
C++
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))
|
|
);
|
|
}
|
|
};
|
|
} |