Exact source used by this build. SHA-256: 142d677d116755a8f7d6ac7ce1173aa18f841ea0f9c65a8a434c28f93f241aed.

1 /** A compact deterministic PRNG whose numeric state can be persisted directly in JSON. */
2 export interface SeededRng { state: number; next(): number; nextInt(maxExclusive: number): number }
3 
4 export function createRng(seed: number): SeededRng {
5   let state = seed >>> 0;
6   const rng: SeededRng = {
7     get state() { return state; },
8     set state(value: number) { state = value >>> 0; },
9     next() {
10       state = (state + 0x6d2b79f5) >>> 0;
11       let value = state;
12       value = Math.imul(value ^ (value >>> 15), value | 1);
13       value ^= value + Math.imul(value ^ (value >>> 7), value | 61);
14       return ((value ^ (value >>> 14)) >>> 0) / 4294967296;
15     },
16     nextInt(maxExclusive) { return Math.floor(rng.next() * maxExclusive); },
17   };
18   return rng;
19 }
20