aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/faker.ts2
-rw-r--r--src/index.ts4
-rw-r--r--src/internal/mersenne.ts27
-rw-r--r--src/simple-faker.ts6
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;
}