rng/randomness_tests/frequency_monobit.cpp
2025-07-06 17:13:58 +01:00

33 lines
925 B
C++

//
// frequency_monobit.cpp
// rng
//
// Created by Asher Falcon on 21/06/2025.
//
#include "../rng.h"
#include "./rngtest.h"
namespace splat {
class frequency_monobit_test : public RNGTEST {
public:
frequency_monobit_test(std::vector<std::bitset<32>> &testData) : RNGTEST(testData) {
testPValue = runTest(data);
testPassed = testPValue > 0.01;
}
std::string getName() override {
return "Frequency Monobit";
}
double runTest(std::vector<std::bitset<32>> &data) override {
long long s = 0;
for(auto bitset : data){
for(int i=0; i<32; i++){
s += (2*bitset[i])-1;
}
}
double sobs = ((double)std::abs(s))/std::sqrt(data.size()*32);
double pvalue = std::erfc(sobs/std::sqrt(2));
return pvalue;
}
};
}