diff options
| author | DivisionByZero <[email protected]> | 2024-09-26 17:50:05 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-09-26 17:50:05 +0200 |
| commit | 9537dfddba882bd93d9a429697fd44bc72428426 (patch) | |
| tree | f60b5b694d5e4e8ddab228aeb20c7b7746685edc /src/utils/mersenne.ts | |
| parent | 424b120a4d94b15b6e77c04a0aaffd0016a9c870 (diff) | |
| download | faker-9537dfddba882bd93d9a429697fd44bc72428426.tar.xz faker-9537dfddba882bd93d9a429697fd44bc72428426.zip | |
infra: update file structure for util/internal (#3141)
Diffstat (limited to 'src/utils/mersenne.ts')
| -rw-r--r-- | src/utils/mersenne.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/utils/mersenne.ts b/src/utils/mersenne.ts new file mode 100644 index 00000000..de415f91 --- /dev/null +++ b/src/utils/mersenne.ts @@ -0,0 +1,48 @@ +import { MersenneTwister19937 } from '../internal/mersenne'; +import type { Randomizer } from '../randomizer'; + +/** + * Generates a MersenneTwister19937 randomizer with 32 bits of precision. + * This is the default randomizer used by faker prior to v9.0. + */ +export function generateMersenne32Randomizer(): Randomizer { + const twister = new MersenneTwister19937(); + + twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)); + + return { + next(): number { + return twister.genrandReal2(); + }, + seed(seed: number | number[]): void { + if (typeof seed === 'number') { + twister.initGenrand(seed); + } else if (Array.isArray(seed)) { + twister.initByArray(seed, seed.length); + } + }, + }; +} + +/** + * Generates a MersenneTwister19937 randomizer with 53 bits of precision. + * This is the default randomizer used by faker starting with v9.0. + */ +export function generateMersenne53Randomizer(): Randomizer { + const twister = new MersenneTwister19937(); + + twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)); + + return { + next(): number { + return twister.genrandRes53(); + }, + seed(seed: number | number[]): void { + if (typeof seed === 'number') { + twister.initGenrand(seed); + } else if (Array.isArray(seed)) { + twister.initByArray(seed, seed.length); + } + }, + }; +} |
