"use strict"; exports.__esModule = true; exports.congruential32 = void 0; var MULTIPLIER = 0x000343fd; var INCREMENT = 0x00269ec3; var MASK = 0xffffffff; var MASK_2 = (1 << 31) - 1; var computeNextSeed = function (seed) { return (seed * MULTIPLIER + INCREMENT) & MASK; }; var computeValueFromNextSeed = function (nextseed) { return (nextseed & MASK_2) >> 16; }; var LinearCongruential32 = (function () { function LinearCongruential32(seed) { this.seed = seed; } LinearCongruential32.prototype.clone = function () { return new LinearCongruential32(this.seed); }; LinearCongruential32.prototype.next = function () { var nextRng = new LinearCongruential32(this.seed); var out = nextRng.unsafeNext(); return [out, nextRng]; }; LinearCongruential32.prototype.unsafeNext = function () { var s1 = computeNextSeed(this.seed); var v1 = computeValueFromNextSeed(s1); var s2 = computeNextSeed(s1); var v2 = computeValueFromNextSeed(s2); this.seed = computeNextSeed(s2); var v3 = computeValueFromNextSeed(this.seed); var vnext = v3 + ((v2 + (v1 << 15)) << 15); return vnext | 0; }; LinearCongruential32.prototype.getState = function () { return [this.seed]; }; return LinearCongruential32; }()); function fromState(state) { var valid = state.length === 1; if (!valid) { throw new Error('The state must have been produced by a congruential32 RandomGenerator'); } return new LinearCongruential32(state[0]); } exports.congruential32 = Object.assign(function (seed) { return new LinearCongruential32(seed); }, { fromState: fromState });