diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/faker.ts | 2 | ||||
| -rw-r--r-- | src/index.ts | 4 | ||||
| -rw-r--r-- | src/internal/mersenne.ts | 27 | ||||
| -rw-r--r-- | src/simple-faker.ts | 6 |
4 files changed, 32 insertions, 7 deletions
diff --git a/src/faker.ts b/src/faker.ts index c4f65187..5f5e14ce 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -152,7 +152,7 @@ export class Faker extends SimpleFaker { * Specify this only if you want to use it to achieve a specific goal, * such as sharing the same random generator with other instances/tools. * - * @default generateMersenne32Randomizer() + * @default generateMersenne53Randomizer() */ randomizer?: Randomizer; }) { diff --git a/src/index.ts b/src/index.ts index 4fb24bc4..33ec9e2e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -72,6 +72,10 @@ export type { export { FakerError } from './errors/faker-error'; export { Faker } from './faker'; export type { FakerOptions } from './faker'; +export { + generateMersenne32Randomizer, + generateMersenne53Randomizer, +} from './internal/mersenne'; export * from './locale'; export { fakerEN as faker } from './locale'; export * from './locales'; diff --git a/src/internal/mersenne.ts b/src/internal/mersenne.ts index 2372e364..d01b5ee9 100644 --- a/src/internal/mersenne.ts +++ b/src/internal/mersenne.ts @@ -328,9 +328,7 @@ export class MersenneTwister19937 { /** * Generates a MersenneTwister19937 randomizer with 32 bits of precision. - * This is the default randomizer used by Faker. - * - * @internal + * This is the default randomizer used by faker prior to v9.0. */ export function generateMersenne32Randomizer(): Randomizer { const twister = new MersenneTwister19937(); @@ -350,3 +348,26 @@ export function generateMersenne32Randomizer(): Randomizer { }, }; } + +/** + * 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); + } + }, + }; +} diff --git a/src/simple-faker.ts b/src/simple-faker.ts index 3993392d..e775cbc7 100644 --- a/src/simple-faker.ts +++ b/src/simple-faker.ts @@ -1,4 +1,4 @@ -import { generateMersenne32Randomizer } from './internal/mersenne'; +import { generateMersenne53Randomizer } from './internal/mersenne'; import { DatatypeModule } from './modules/datatype'; import { SimpleDateModule } from './modules/date'; import { SimpleHelpersModule } from './modules/helpers'; @@ -117,12 +117,12 @@ export class SimpleFaker { * Specify this only if you want to use it to achieve a specific goal, * such as sharing the same random generator with other instances/tools. * - * @default generateMersenne32Randomizer() + * @default generateMersenne53Randomizer() */ randomizer?: Randomizer; } = {} ) { - const { randomizer = generateMersenne32Randomizer() } = options; + const { randomizer = generateMersenne53Randomizer() } = options; this._randomizer = randomizer; } |
