Skip to content

Commit fe62c19

Browse files
authored
refactor: set seed directly (#563)
1 parent 7141cd7 commit fe62c19

File tree

4 files changed

+35
-20
lines changed

4 files changed

+35
-20
lines changed

src/datatype.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,7 @@ import type { Faker } from '.';
44
* Module to generate various primitive values and data types.
55
*/
66
export class Datatype {
7-
constructor(private readonly faker: Faker, seed?: number | number[]) {
8-
// Use a user provided seed if it is an array or number
9-
if (Array.isArray(seed) && seed.length) {
10-
this.faker.mersenne.seed_array(seed);
11-
} else if (!Array.isArray(seed) && !isNaN(seed)) {
12-
this.faker.mersenne.seed(seed);
13-
}
14-
7+
constructor(private readonly faker: Faker) {
158
// Bind `this` so namespaced is working correctly
169
for (const name of Object.getOwnPropertyNames(Datatype.prototype)) {
1710
if (name === 'constructor' || typeof this[name] !== 'function') {

src/faker.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,13 @@ export class Faker {
129129
});
130130
}
131131

132-
seed(value?: number | number[]): void {
133-
this.seedValue = value;
134-
this.random = new Random(this, this.seedValue);
135-
this.datatype = new Datatype(this, this.seedValue);
132+
seed(seed?: number | number[]): void {
133+
this.seedValue = seed;
134+
if (Array.isArray(seed) && seed.length) {
135+
this.mersenne.seed_array(seed);
136+
} else if (!Array.isArray(seed) && !isNaN(seed)) {
137+
this.mersenne.seed(seed);
138+
}
136139
}
137140

138141
/**

src/random.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,7 @@ function arrayRemove<T>(arr: T[], values: T[]): T[] {
1818
* Generates random values of different kinds. Some methods are deprecated and have been moved to dedicated modules.
1919
*/
2020
export class Random {
21-
constructor(private readonly faker: Faker, seed?: number | number[]) {
22-
// Use a user provided seed if it is an array or number
23-
if (Array.isArray(seed) && seed.length) {
24-
this.faker.mersenne.seed_array(seed);
25-
} else if (!Array.isArray(seed) && !isNaN(seed)) {
26-
this.faker.mersenne.seed(seed);
27-
}
28-
21+
constructor(private readonly faker: Faker) {
2922
// Bind `this` so namespaced is working correctly
3023
for (const name of Object.getOwnPropertyNames(Random.prototype)) {
3124
if (name === 'constructor' || typeof this[name] !== 'function') {

test/faker.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { beforeEach, describe, expect, it } from 'vitest';
2+
import { faker } from '../src';
3+
4+
describe('faker', () => {
5+
beforeEach(() => {
6+
faker.locale = 'en';
7+
});
8+
9+
// This is only here for coverage
10+
// The actual test is in mersenne.spec.ts
11+
describe('seed()', () => {
12+
it('seed(number)', () => {
13+
faker.seed(1);
14+
15+
const actual = faker.animal.cat();
16+
expect(actual).toBe('Korat');
17+
});
18+
19+
it('seed(number[])', () => {
20+
faker.seed([1, 2, 3]);
21+
22+
const actual = faker.animal.cat();
23+
expect(actual).toBe('Oriental');
24+
});
25+
});
26+
});

0 commit comments

Comments
 (0)