randomness
Version:
Randomness tests
30 lines • 1.07 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const mathjs_1 = require("mathjs");
const fft_js_1 = __importDefault(require("fft-js"));
const test = (bits, alpha = 0.01) => {
const n = bits.length;
const ts = [];
const max = n % 2 == 0 ? n : n - 1;
for (let i = 0; i < max; i++) {
ts.push(bits[i] * 2 - 1);
}
const fs = fft_js_1.default.fft(ts);
const magnitudes = fft_js_1.default.util.fftMag(fs);
const T = Math.sqrt(Math.log(1.0 / 0.05) * n);
const N0 = (0.95 * n) / 2.0;
let N1 = 0;
for (let index = 0; index < magnitudes.length; index++) {
if (magnitudes[index] < T)
N1 += 1;
}
const d = (N1 - N0) / Math.sqrt((n * 0.95 * 0.05) / 4);
const p = 1 - (0, mathjs_1.erf)(Math.abs(d) / Math.sqrt(2));
const success = p >= alpha;
return [success, p];
};
exports.default = test;
//# sourceMappingURL=dft-test.js.map