UNPKG

randomness

Version:
36 lines 1.26 kB
"use strict"; 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