randomness
Version:
Randomness tests
36 lines • 1.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const gamma_1 = require("../utils/gamma");
const counter_1 = require("../utils/counter");
const defaultBlockSize = 10;
const blockNumberMax = 100;
const sequenceSizeMin = 100;
const test = (bits, alpha = 0.01) => {
const n = bits.length;
if (n < sequenceSizeMin) {
throw new Error('Too little data for test. Supply at least 100 bits');
}
let M = defaultBlockSize;
let N = Math.floor(n / M);
if (N > blockNumberMax) {
N = blockNumberMax - 1;
M = Math.floor(n / N);
}
const totalBlocks = N;
const blockSize = M;
const proportions = [];
for (let i = 0; i < totalBlocks; i++) {
const block = bits.slice(i * blockSize, (i + 1) * blockSize);
const [_zeros, ones] = (0, counter_1.getCounts)(block);
proportions.push(ones / blockSize);
}
let chiSquare = 0;
for (let i = 0; i < proportions.length; i++) {
chiSquare += 4 * blockSize * (proportions[i] - 1 / 2) ** 2;
}
const p = (0, gamma_1.gammaincc)(totalBlocks / 2, chiSquare / 2);
const success = p >= alpha;
return [success, p];
};
exports.default = test;
//# sourceMappingURL=frequency-within-block-test.js.map