From 7719660bac855cf6be3aaeee3392cfcc4af29e5a Mon Sep 17 00:00:00 2001 From: Asher Date: Sun, 29 Jun 2025 23:41:44 +0100 Subject: [PATCH] Added xorshift generator and longest runs test --- rng/rng/.vscode/c_cpp_properties.json | 16 ++++ rng/rng/.vscode/settings.json | 63 ------------- rng/rng/generators/LCG/lehmer.cpp | 50 ++++------ rng/rng/generators/generator.h | 18 ++++ rng/rng/generators/mt19937.cpp | 57 +++++------ rng/rng/generators/xorshift.cpp | 25 +++++ rng/rng/main.cpp | 89 ++++++++++++------ rng/rng/main.o | Bin 0 -> 431640 bytes rng/rng/plot_data.py | 20 ---- rng/rng/randomness_tests/frequency_block.cpp | 74 ++++++++------- .../randomness_tests/frequency_monobit.cpp | 46 +++++---- rng/rng/randomness_tests/rngtest.h | 25 +++++ rng/rng/randomness_tests/runs.cpp | 52 ++++++---- rng/rng/randomness_tests/runs_ones.cpp | 78 +++++++++++++++ rng/rng/readme.md | 2 + rng/rng/rng.h | 1 + rng/rng/run.sh | 5 +- 17 files changed, 370 insertions(+), 251 deletions(-) create mode 100644 rng/rng/.vscode/c_cpp_properties.json delete mode 100644 rng/rng/.vscode/settings.json create mode 100644 rng/rng/generators/generator.h create mode 100644 rng/rng/generators/xorshift.cpp create mode 100755 rng/rng/main.o delete mode 100644 rng/rng/plot_data.py create mode 100644 rng/rng/randomness_tests/rngtest.h create mode 100644 rng/rng/randomness_tests/runs_ones.cpp create mode 100644 rng/rng/readme.md diff --git a/rng/rng/.vscode/c_cpp_properties.json b/rng/rng/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..6275923 --- /dev/null +++ b/rng/rng/.vscode/c_cpp_properties.json @@ -0,0 +1,16 @@ +{ + "configurations": [ + { + "name": "Mac", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "cStandard": "c17", + "cppStandard": "c++20", + "intelliSenseMode": "macos-clang-arm64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/rng/rng/.vscode/settings.json b/rng/rng/.vscode/settings.json deleted file mode 100644 index 00613a2..0000000 --- a/rng/rng/.vscode/settings.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "files.associations": { - "*.ts": "typescriptreact", - "array": "cpp", - "iostream": "cpp", - "__bit_reference": "cpp", - "__hash_table": "cpp", - "__locale": "cpp", - "__node_handle": "cpp", - "__split_buffer": "cpp", - "__threading_support": "cpp", - "__verbose_abort": "cpp", - "bitset": "cpp", - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "complex": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "deque": "cpp", - "execution": "cpp", - "memory": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "iomanip": "cpp", - "ios": "cpp", - "iosfwd": "cpp", - "istream": "cpp", - "limits": "cpp", - "locale": "cpp", - "mutex": "cpp", - "new": "cpp", - "optional": "cpp", - "ostream": "cpp", - "print": "cpp", - "queue": "cpp", - "ratio": "cpp", - "sstream": "cpp", - "stack": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "string": "cpp", - "string_view": "cpp", - "tuple": "cpp", - "typeinfo": "cpp", - "unordered_map": "cpp", - "variant": "cpp", - "vector": "cpp", - "algorithm": "cpp", - "__tree": "cpp", - "csignal": "cpp", - "map": "cpp", - "set": "cpp", - "unordered_set": "cpp" - } -} \ No newline at end of file diff --git a/rng/rng/generators/LCG/lehmer.cpp b/rng/rng/generators/LCG/lehmer.cpp index 7dabe7c..c99a218 100644 --- a/rng/rng/generators/LCG/lehmer.cpp +++ b/rng/rng/generators/LCG/lehmer.cpp @@ -6,38 +6,26 @@ // #include "../../rng.h" +#include "../generator.h" // parameters recommended by Nakazawa & Nakazawa // https://en.wikipedia.org/wiki/Lehmer_random_number_generator -uint64_t lehmer_minstd(uint64_t prev){ - uint64_t a = 7759097958782935LL; - uint64_t m = 18055400005099021LL; - - uint64_t result = (a * prev) % m; - - return result; -} - -class lehmer_generator { - uint64_t seed; - public: - uint32_t generate(){ - seed = lehmer_minstd(seed); - return seed; - } - lehmer_generator(uint64_t genSeed){ - seed = genSeed; - } -}; - -// std::vector> lehmer_generate(int seed, int amount){ -// std::vector> bits(amount); - -// for(int i=0; i> 32; + } + std::string getName() override { + return "lehmer"; + } + private: + uint64_t a = 7759097958782935LL; + uint64_t m = 18055400005099021LL; + }; +} \ No newline at end of file diff --git a/rng/rng/generators/generator.h b/rng/rng/generators/generator.h new file mode 100644 index 0000000..11d598d --- /dev/null +++ b/rng/rng/generators/generator.h @@ -0,0 +1,18 @@ +#include "../rng.h" + +#pragma once + +namespace splat { + class PRNG { + public: + virtual uint32_t generate() {return -1;}; + virtual ~PRNG() = default; + virtual std::string getName() {return "N/A";}; + PRNG(uint32_t genseed){ + seed = genseed; + } + protected: + uint32_t seed; + }; +} + diff --git a/rng/rng/generators/mt19937.cpp b/rng/rng/generators/mt19937.cpp index 1af9f00..4d5a653 100644 --- a/rng/rng/generators/mt19937.cpp +++ b/rng/rng/generators/mt19937.cpp @@ -1,4 +1,5 @@ #include "../rng.h" +#include "./generator.h" // more specifically this will be mt19937 - 32 bit @@ -63,33 +64,33 @@ std::array mt19937_temper(std::array state){ return tempered; } -class mt19937_generator { - public: - uint32_t seed; - uint32_t generate() { - uint32_t generated = random_values[position]; - position++; - if(position>=624){ +namespace splat { + class mt19937_generator : public PRNG { + public: + mt19937_generator(uint32_t genSeed) : PRNG(genSeed) { + state = mt19937_init(seed); nextblock(); } - return generated; - } - double generate_01(){ - return ((double)generate())/(4294967295); - } - mt19937_generator(uint32_t genSeed){ - seed = genSeed; - state = mt19937_init(seed); - nextblock(); - } - private: - std::array state; - std::array random_values; - int position; - // goes to next block of 624 values - void nextblock() { - state = mt19937_twist(state); - random_values = mt19937_temper(state); - position = 0; - } -}; + uint32_t generate() override { + uint32_t generated = random_values[position]; + position++; + if(position>=624){ + nextblock(); + } + return generated; + } + std::string getName() override { + return "mt19937-32"; + } + private: + std::array state; + std::array random_values; + int position; + // goes to next block of 624 values + void nextblock() { + state = mt19937_twist(state); + random_values = mt19937_temper(state); + position = 0; + } + }; +} \ No newline at end of file diff --git a/rng/rng/generators/xorshift.cpp b/rng/rng/generators/xorshift.cpp new file mode 100644 index 0000000..904e03c --- /dev/null +++ b/rng/rng/generators/xorshift.cpp @@ -0,0 +1,25 @@ +#include "../rng.h" +#include "./generator.h" + +// parameters recommended by Nakazawa & Nakazawa +// https://en.wikipedia.org/wiki/Lehmer_random_number_generator + +namespace splat { + class xorshift32 : public PRNG { + public: + xorshift32(uint32_t genSeed) : PRNG(genSeed) { + state = genSeed; + } + uint32_t generate() override { + state ^= state << 13; + state ^= state >> 17; + state ^= state << 5; + return state; + } + std::string getName() override { + return "xorshift32"; + } + private: + uint32_t state; + }; +} \ No newline at end of file diff --git a/rng/rng/main.cpp b/rng/rng/main.cpp index fceac27..c943570 100644 --- a/rng/rng/main.cpp +++ b/rng/rng/main.cpp @@ -8,45 +8,78 @@ #include "rng.h" #include "generators/LCG/lehmer.cpp" #include "generators/mt19937.cpp" +#include "generators/xorshift.cpp" #include "randomness_tests/frequency_monobit.cpp" #include "randomness_tests/frequency_block.cpp" #include "randomness_tests/runs.cpp" +#include "randomness_tests/runs_ones.cpp" + + + +#include "generators/generator.h" +#include "randomness_tests/rngtest.h" + +namespace splat { + template + void addGen(std::vector> &generators, uint32_t &seed){ + generators.push_back(std::make_unique(seed)); + } + + std::vector> getAllGenerators(uint32_t seed){ + std::vector> generators; + + // add generators here + addGen(generators, seed); + addGen(generators, seed); + addGen(generators,seed); + + return generators; + } + + template + void addTest(std::vector> &tests, std::vector> &data){ + tests.push_back(std::make_unique(data)); + } + + std::vector> getAllTests(std::vector> &data){ + std::vector> tests; + + // add generators here + addTest(tests, data); + addTest(tests, data); + addTest(tests, data); + addTest(tests, data); + + return tests; + } + +} int main(int argc, const char * argv[]) { - int seed = 8898; + int seed = 235211213; int blocksgenerated = 1000000; - mt19937_generator mt2 = mt19937_generator(seed); - lehmer_generator lg = lehmer_generator(seed); + std::vector> generators = splat::getAllGenerators(1238124); + + for(const std::unique_ptr &generator : generators){ + std::cout << generator->getName() << ": \n"; + std::vector> bits; + for(int i=0; igenerate()); + } - std::vector> mtbits; - std::vector> lgbits; + std::vector> tests = splat::getAllTests(bits); - for(int i=0; i &test : tests){ + std::string namestr = test->getName(); + while(namestr.length() < 30){ + namestr.append(" "); + } + std::cout << " - " << namestr << " = " << (test->passed()?"PASS":"FAIL") << " ("<< std::fixed << std::setprecision(8) << test->value() <<")\n"; + } } - // for(auto bs : lgbits){ - // for(int i=0; i<32; i++){ - // std::cout << bs[i]; - // } - // } - - int freqblocksize = (blocksgenerated * 32) / 120; - - std::cout << "Linear Congruential Generator:\n"; - std::cout << " - FreqMonobit = "<< std::fixed << std::setprecision(10) << test_frequency_monobit(lgbits) << "\n"; - std::cout << " - FreqBlock (n/120) = "<< std::fixed << std::setprecision(10) << test_frequency_block(lgbits, freqblocksize) << "\n"; - std::cout << " - Runs = "<< std::fixed << std::setprecision(10) << test_runs(lgbits) << "\n"; - - std::cout << "Mersenne Twister mt19937-32:\n"; - std::cout << " - FreqMonobit = "<< std::fixed << std::setprecision(10) << test_frequency_monobit(mtbits) << "\n"; - std::cout << " - FreqBlock (n/120) = "<< std::fixed << std::setprecision(10) << test_frequency_block(mtbits, freqblocksize) << "\n"; - std::cout << " - Runs = "<< std::fixed << std::setprecision(10) << test_runs(mtbits) << "\n"; - - return 0; -} +}; diff --git a/rng/rng/main.o b/rng/rng/main.o new file mode 100755 index 0000000000000000000000000000000000000000..3691112252b63aaff2476672f99b0a2e97bc0f31 GIT binary patch literal 431640 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 literal 0 HcmV?d00001 diff --git a/rng/rng/plot_data.py b/rng/rng/plot_data.py deleted file mode 100644 index 7abfd63..0000000 --- a/rng/rng/plot_data.py +++ /dev/null @@ -1,20 +0,0 @@ -import matplotlib.pyplot as plt - -x_coords = [] -y_coords = [] - -with open("data.txt", "r") as file: - for line in file: - x_coords.append(float(line.split(",")[0])) - y_coords.append(float(line.split(",")[1])) - -plt.figure(figsize=(10, 8)) -plt.scatter(x_coords, y_coords, alpha=0.6, s=1) -plt.grid(True, alpha=0.3) - -plt.axis('equal') -plt.xlim(-0.05, 1.05) -plt.ylim(-0.05, 1.05) - -plt.tight_layout() -plt.show() \ No newline at end of file diff --git a/rng/rng/randomness_tests/frequency_block.cpp b/rng/rng/randomness_tests/frequency_block.cpp index 1d85114..ffab45e 100644 --- a/rng/rng/randomness_tests/frequency_block.cpp +++ b/rng/rng/randomness_tests/frequency_block.cpp @@ -8,44 +8,50 @@ #include "../rng.h" #include "../math/incomplete_gamma.cpp" -/** - * Returns the p value from the block frequency test - */ -double test_frequency_block(std::vector> data, u_long block_size){ - - // std::cout << "BLOCK SIZE: "<< block_size<<"\n"; +#include "./rngtest.h" - long long bitcount = data.size() * 32; - long long chunks = bitcount / block_size; +namespace splat { + class frequency_block_test : public RNGTEST { + public: + frequency_block_test(std::vector> &testData) : RNGTEST(testData) { + block_size = data.size() * 32 / 150; + testPValue = runTest(data); + testPassed = testPValue > 0.01; + } + std::string getName() override { + return std::format("Frequency Block [{}]", block_size); + } + double runTest(std::vector> &data) override { - double x2stat = 0; - - for(int chunkIndex = 0; chunkIndex < chunks; chunkIndex++){ - // std::cout << "NEWCHUNK: "; - double onecount = 0; - for(int i=0; i .01n and N < 100. - */ -bool pass_frequency_monobit(std::vector> data, int chunkSize){ - double pv = test_frequency_block(data, chunkSize); - return pv >= 0.01; + // std::cout << "\n"; + } + + // std::cout << "[debug] calling igamc with "<<(chunks/2) <<','<<(x2stat/2) << "\n"; + double p = igam(chunks/2, x2stat/2); + return p; + } + private: + long long block_size; + + }; } \ No newline at end of file diff --git a/rng/rng/randomness_tests/frequency_monobit.cpp b/rng/rng/randomness_tests/frequency_monobit.cpp index f51470a..7b6d59e 100644 --- a/rng/rng/randomness_tests/frequency_monobit.cpp +++ b/rng/rng/randomness_tests/frequency_monobit.cpp @@ -6,30 +6,28 @@ // #include "../rng.h" +#include "./rngtest.h" - -double test_frequency_monobit(std::vector> data){ - - long long s = 0; - - for(auto bitset : data){ - for(int i=0; i<32; i++){ - s += (2*bitset[i])-1; +namespace splat { + class frequency_monobit_test : public RNGTEST { + public: + frequency_monobit_test(std::vector> &testData) : RNGTEST(testData) { + testPValue = runTest(data); + testPassed = testPValue > 0.01; } - } - - // std::cout << " [sval: "<> data){ - double pv = test_frequency_monobit(data); - return pv >= 0.01; + std::string getName() override { + return "Frequency Monobit"; + } + double runTest(std::vector> &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; + } + }; } \ No newline at end of file diff --git a/rng/rng/randomness_tests/rngtest.h b/rng/rng/randomness_tests/rngtest.h new file mode 100644 index 0000000..ad2ffa7 --- /dev/null +++ b/rng/rng/randomness_tests/rngtest.h @@ -0,0 +1,25 @@ +#include "../rng.h" + +#pragma once + +namespace splat { + class RNGTEST { + public: + bool passed(){ + return testPassed; + } + double value(){ + return testPValue; + } + virtual ~RNGTEST() = default; + virtual std::string getName() {return "N/A";}; + RNGTEST(std::vector> &testData) : data(testData){ + }; + protected: + std::vector> &data; + bool testPassed; + double testPValue; + virtual double runTest(std::vector> &data) {return -1.0;}; + }; +} + diff --git a/rng/rng/randomness_tests/runs.cpp b/rng/rng/randomness_tests/runs.cpp index a06b501..20186d4 100644 --- a/rng/rng/randomness_tests/runs.cpp +++ b/rng/rng/randomness_tests/runs.cpp @@ -1,26 +1,38 @@ #include "../rng.h" +#include "./rngtest.h" -double test_runs(std::vector> data){ - - long long totalSize = data.size() * 32; - - double vnobs = 1; - - double onesproportion = 0; - - for(int i=0; i> &testData) : RNGTEST(testData) { + testPValue = runTest(data); + testPassed = testPValue > 0.01; } - onesproportion+=data[i/32][i%32]; - } + std::string getName() override { + return "Runs"; + } + double runTest(std::vector> &data) override { + long long totalSize = data.size() * 32; - onesproportion/=totalSize; + double vnobs = 1; - return std::erfc( - std::abs(vnobs-(2*totalSize*onesproportion*(1-onesproportion))) - / - (2*std::sqrt(2*totalSize)*onesproportion*(1-onesproportion)) - ); + double onesproportion = 0; + + for(int i=0; i> &testData) : RNGTEST(testData) { + testPValue = runTest(data); + testPassed = testPValue > 0.01; + } + std::string getName() override { + return "Runs of 1s"; + } + double runTest(std::vector> &data) override { + long long totalSize = data.size() * 32; + + if(totalSize < 750000){ + std::cout << "Error, runs of ones test requires more than 750K bits of input\n"; + return 0; + } + // we do it with M=10^4 here + + std::vector counts(7,0); + + double chunks = totalSize / 10000; + + for(int chunkIndex=0; chunkIndexlongestRun) longestRun = ones; + ones = 0; + } + } + + if(longestRun <=10){ + counts[0]++; + }else if(longestRun>=16){ + counts[6]++; + }else{ + counts[longestRun-10]++; + } + } + + double x2 = 0; + + std::vector probabilities = { + 0.0882, + 0.2092, + 0.2483, + 0.1933, + 0.1208, + 0.0675, + 0.0727 + }; + + for(int i=0; i<7; i++){ + x2 += std::pow((counts[i] - (chunks * probabilities[i])),2.0) /(chunks * probabilities[i]); + + } + return igamc(3, x2/2.0); + } + }; +} \ No newline at end of file diff --git a/rng/rng/readme.md b/rng/rng/readme.md new file mode 100644 index 0000000..e5b5843 --- /dev/null +++ b/rng/rng/readme.md @@ -0,0 +1,2 @@ +🫟 Splatter +c++ rng library with generators and tests \ No newline at end of file diff --git a/rng/rng/rng.h b/rng/rng/rng.h index 4476f4f..ca4b9d5 100644 --- a/rng/rng/rng.h +++ b/rng/rng/rng.h @@ -14,3 +14,4 @@ #include #include #include +#include \ No newline at end of file diff --git a/rng/rng/run.sh b/rng/rng/run.sh index acd9d33..f1d1aaa 100755 --- a/rng/rng/run.sh +++ b/rng/rng/run.sh @@ -1,3 +1,2 @@ -g++ -std=c++11 main.cpp -o main.o -./main.o -rm main.o \ No newline at end of file +g++ -std=c++20 main.cpp -o main.o +./main.o \ No newline at end of file