aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorShinigami <[email protected]>2022-10-30 09:03:26 +0100
committerGitHub <[email protected]>2022-10-30 08:03:26 +0000
commit9abfcfb90cc73bfe961d446f5fb950976d5c2ccd (patch)
tree1e76203a6cfd8bb6c2b83734fee4cebf56db5072 /test
parent4da3d5eac3805f609f4e40385aee6a645fd93540 (diff)
downloadfaker-9abfcfb90cc73bfe961d446f5fb950976d5c2ccd.tar.xz
faker-9abfcfb90cc73bfe961d446f5fb950976d5c2ccd.zip
refactor(mersenne): rewrite internal mersenne (#1447)
Diffstat (limited to 'test')
-rw-r--r--test/__snapshots__/mersenne.spec.ts.snap48
-rw-r--r--test/mersenne.spec.ts75
2 files changed, 33 insertions, 90 deletions
diff --git a/test/__snapshots__/mersenne.spec.ts.snap b/test/__snapshots__/mersenne.spec.ts.snap
index 1c221b19..21d3e4cc 100644
--- a/test/__snapshots__/mersenne.spec.ts.snap
+++ b/test/__snapshots__/mersenne.spec.ts.snap
@@ -1,49 +1,37 @@
// Vitest Snapshot v1
-exports[`mersenne twister > seed: [42,1,2] > rand() 1`] = `28056`;
+exports[`mersenne twister > seed: [42,1,2] > should return deterministic values for next({ min: -50, max: 60 }) 1`] = `44`;
-exports[`mersenne twister > seed: [42,1,2] > should return deterministic values for rand(100, 0) 1`] = `85`;
+exports[`mersenne twister > seed: [42,1,2] > should return deterministic values for next({ min: -60, max: 0 }) 1`] = `-9`;
-exports[`mersenne twister > seed: [42,1,2] > should return deterministic values for rand(100, undefined) 1`] = `85`;
+exports[`mersenne twister > seed: [42,1,2] > should return deterministic values for next({ min: 0, max: 100 }) 1`] = `85`;
-exports[`mersenne twister > seed: [42,1,2] > should return deterministic values for rand(undefined, 0) 1`] = `28056`;
+exports[`mersenne twister > seed: [1211,1,2] > should return deterministic values for next({ min: -50, max: 60 }) 1`] = `48`;
-exports[`mersenne twister > seed: [1211,1,2] > rand() 1`] = `29217`;
+exports[`mersenne twister > seed: [1211,1,2] > should return deterministic values for next({ min: -60, max: 0 }) 1`] = `-7`;
-exports[`mersenne twister > seed: [1211,1,2] > should return deterministic values for rand(100, 0) 1`] = `89`;
+exports[`mersenne twister > seed: [1211,1,2] > should return deterministic values for next({ min: 0, max: 100 }) 1`] = `89`;
-exports[`mersenne twister > seed: [1211,1,2] > should return deterministic values for rand(100, undefined) 1`] = `89`;
+exports[`mersenne twister > seed: [1337,1,2] > should return deterministic values for next({ min: -50, max: 60 }) 1`] = `-31`;
-exports[`mersenne twister > seed: [1211,1,2] > should return deterministic values for rand(undefined, 0) 1`] = `29217`;
+exports[`mersenne twister > seed: [1337,1,2] > should return deterministic values for next({ min: -60, max: 0 }) 1`] = `-50`;
-exports[`mersenne twister > seed: [1337,1,2] > rand() 1`] = `5895`;
+exports[`mersenne twister > seed: [1337,1,2] > should return deterministic values for next({ min: 0, max: 100 }) 1`] = `17`;
-exports[`mersenne twister > seed: [1337,1,2] > should return deterministic values for rand(100, 0) 1`] = `17`;
+exports[`mersenne twister > seed: 42 > should return deterministic values for next({ min: -50, max: 60 }) 1`] = `-9`;
-exports[`mersenne twister > seed: [1337,1,2] > should return deterministic values for rand(100, undefined) 1`] = `17`;
+exports[`mersenne twister > seed: 42 > should return deterministic values for next({ min: -60, max: 0 }) 1`] = `-38`;
-exports[`mersenne twister > seed: [1337,1,2] > should return deterministic values for rand(undefined, 0) 1`] = `5895`;
+exports[`mersenne twister > seed: 42 > should return deterministic values for next({ min: 0, max: 100 }) 1`] = `37`;
-exports[`mersenne twister > seed: 42 > rand() 1`] = `12272`;
+exports[`mersenne twister > seed: 1211 > should return deterministic values for next({ min: -50, max: 60 }) 1`] = `52`;
-exports[`mersenne twister > seed: 42 > should return deterministic values for rand(100, 0) 1`] = `37`;
+exports[`mersenne twister > seed: 1211 > should return deterministic values for next({ min: -60, max: 0 }) 1`] = `-5`;
-exports[`mersenne twister > seed: 42 > should return deterministic values for rand(100, undefined) 1`] = `37`;
+exports[`mersenne twister > seed: 1211 > should return deterministic values for next({ min: 0, max: 100 }) 1`] = `92`;
-exports[`mersenne twister > seed: 42 > should return deterministic values for rand(undefined, 0) 1`] = `12272`;
+exports[`mersenne twister > seed: 1337 > should return deterministic values for next({ min: -50, max: 60 }) 1`] = `-22`;
-exports[`mersenne twister > seed: 1211 > rand() 1`] = `30425`;
+exports[`mersenne twister > seed: 1337 > should return deterministic values for next({ min: -60, max: 0 }) 1`] = `-45`;
-exports[`mersenne twister > seed: 1211 > should return deterministic values for rand(100, 0) 1`] = `92`;
-
-exports[`mersenne twister > seed: 1211 > should return deterministic values for rand(100, undefined) 1`] = `92`;
-
-exports[`mersenne twister > seed: 1211 > should return deterministic values for rand(undefined, 0) 1`] = `30425`;
-
-exports[`mersenne twister > seed: 1337 > rand() 1`] = `8586`;
-
-exports[`mersenne twister > seed: 1337 > should return deterministic values for rand(100, 0) 1`] = `26`;
-
-exports[`mersenne twister > seed: 1337 > should return deterministic values for rand(100, undefined) 1`] = `26`;
-
-exports[`mersenne twister > seed: 1337 > should return deterministic values for rand(undefined, 0) 1`] = `8586`;
+exports[`mersenne twister > seed: 1337 > should return deterministic values for next({ min: 0, max: 100 }) 1`] = `26`;
diff --git a/test/mersenne.spec.ts b/test/mersenne.spec.ts
index 6b0a3125..f6585783 100644
--- a/test/mersenne.spec.ts
+++ b/test/mersenne.spec.ts
@@ -1,53 +1,39 @@
import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
-import { FakerError } from '../src/errors/faker-error';
-import { MersenneModule } from '../src/internal/mersenne/mersenne';
+import type { Mersenne } from '../src/internal/mersenne/mersenne';
+import mersenneFn from '../src/internal/mersenne/mersenne';
import { seededRuns } from './support/seededRuns';
const minMaxTestCases = [
- { max: 100, min: 0 },
- { max: undefined, min: 0 },
- { max: 100, min: undefined },
+ { min: 0, max: 100 },
+ { min: -60, max: 0 },
+ { min: -50, max: 60 },
];
-const functionNames = ['rand'];
-
const NON_SEEDED_BASED_RUN = 25;
describe('mersenne twister', () => {
- let mersenne: MersenneModule;
+ let mersenne: Mersenne;
beforeEach(() => {
- mersenne = new MersenneModule();
+ mersenne = mersenneFn();
});
for (const seed of [...seededRuns, [42, 1, 2], [1337, 1, 2], [1211, 1, 2]]) {
describe(`seed: ${JSON.stringify(seed)}`, () => {
beforeEach(() => {
- if (Array.isArray(seed)) {
- mersenne.seed_array(seed);
- } else {
- mersenne.seed(seed);
- }
+ mersenne.seed(seed);
});
- for (const functionName of functionNames) {
- it(`${functionName}()`, () => {
- const actual = mersenne[functionName]();
-
- expect(actual).toMatchSnapshot();
- });
- }
-
for (const { min, max } of minMaxTestCases) {
- it(`should return deterministic values for rand(${max}, ${min})`, () => {
- const actual = mersenne.rand(max, min);
+ it(`should return deterministic values for next({ min: ${min}, max: ${max} })`, () => {
+ const actual = mersenne.next({ min, max });
expect(actual).toMatchSnapshot();
});
}
- it.todo(`should return 0 for rand(1)`, () => {
- const actual = mersenne.rand(1);
+ it.todo(`should return 0 for next({ min: ${0}, max: ${1} })`, () => {
+ const actual = mersenne.next({ min: 0, max: 1 });
expect(actual).toEqual(0);
});
@@ -66,22 +52,13 @@ describe('mersenne twister', () => {
for (const seed of seeds) {
describe(`random seeded tests ${JSON.stringify(seed)}`, () => {
beforeAll(() => {
- if (Array.isArray(seed)) {
- mersenne.seed_array(seed);
- } else {
- mersenne.seed(seed);
- }
+ mersenne.seed(seed);
});
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
- describe('rand', () => {
- it('should return a random number without given min / max arguments', () => {
- const randomNumber = mersenne.rand();
- expect(randomNumber).toBeTypeOf('number');
- });
-
+ describe('next', () => {
it('should return random number from interval [min, max)', () => {
- const actual = mersenne.rand(0, 2);
+ const actual = mersenne.next({ min: 0, max: 2 });
expect(actual).toBeGreaterThanOrEqual(0);
expect(actual).toBeLessThan(2);
@@ -90,26 +67,4 @@ describe('mersenne twister', () => {
}
});
}
-
- it('should throw an error when attempting to seed() a non-integer', () => {
- expect(() =>
- mersenne.seed(
- // @ts-expect-error: non-integer error
- 'abc'
- )
- ).toThrowError(
- new FakerError('seed(S) must take numeric argument; is string')
- );
- });
-
- it('should throw an error when attempting to seed() a non-integer', () => {
- expect(() =>
- mersenne.seed_array(
- // @ts-expect-error: non-integer error
- 'abc'
- )
- ).toThrowError(
- new FakerError('seed_array(A) must take array of numbers; is string')
- );
- });
});