From 0c742f0da91de42199493f8ca95aa08a36b345e4 Mon Sep 17 00:00:00 2001 From: Richard King Date: Tue, 5 Sep 2023 14:06:19 +0200 Subject: [PATCH] feat(engines): add MT19937 as the DefaultEngine Also refactor and reorganize src and test files using UpperCamelCase to support sensible class usage. BREAKING CHANGE: complete refactor with a DefaultEngine --- packages/common/engines/package.json | 2 +- .../{crypto => CrossCryptoEngine}/index.ts | 4 +-- .../src/{mt19937 => MT19937Engine}/index.ts | 2 ++ .../src/{basic => MathRandomEngine}/index.ts | 4 +-- packages/common/engines/src/index.ts | 10 ++++-- .../env.browser.test.ts | 2 +- .../env.no-crypto.test.ts | 2 +- .../next-bigint.test.ts | 2 +- .../next-boolean.test.ts | 2 +- .../next-float.test.ts | 2 +- .../next-integer.test.ts | 2 +- .../next-bigint.test.ts | 2 +- .../next-boolean.test.ts | 2 +- .../next-float.test.ts | 2 +- .../next-integer.test.ts | 2 +- .../{mt19937 => MT19937Engine}/seed.test.ts | 2 +- .../next-bigint.test.ts | 2 +- .../next-boolean.test.ts | 2 +- .../next-float.test.ts | 2 +- .../next-integer.test.ts | 2 +- packages/common/engines/test/index.test.ts | 32 +++++++++++++++++++ packages/common/engines/umd/index.basic.ts | 2 +- packages/common/engines/umd/index.crypto.ts | 2 +- packages/common/engines/umd/index.seeded.ts | 2 +- packages/common/engines/umd/index.ts | 6 ++-- packages/common/engines/umd/package.json | 2 +- 26 files changed, 69 insertions(+), 29 deletions(-) rename packages/common/engines/src/{crypto => CrossCryptoEngine}/index.ts (94%) rename packages/common/engines/src/{mt19937 => MT19937Engine}/index.ts (90%) rename packages/common/engines/src/{basic => MathRandomEngine}/index.ts (58%) rename packages/common/engines/test/{crypto => CrossCryptoEngine}/env.browser.test.ts (94%) rename packages/common/engines/test/{crypto => CrossCryptoEngine}/env.no-crypto.test.ts (93%) rename packages/common/engines/test/{crypto => CrossCryptoEngine}/next-bigint.test.ts (98%) rename packages/common/engines/test/{crypto => CrossCryptoEngine}/next-boolean.test.ts (88%) rename packages/common/engines/test/{crypto => CrossCryptoEngine}/next-float.test.ts (94%) rename packages/common/engines/test/{crypto => CrossCryptoEngine}/next-integer.test.ts (98%) rename packages/common/engines/test/{mt19937 => MT19937Engine}/next-bigint.test.ts (98%) rename packages/common/engines/test/{mt19937 => MT19937Engine}/next-boolean.test.ts (88%) rename packages/common/engines/test/{mt19937 => MT19937Engine}/next-float.test.ts (94%) rename packages/common/engines/test/{mt19937 => MT19937Engine}/next-integer.test.ts (98%) rename packages/common/engines/test/{mt19937 => MT19937Engine}/seed.test.ts (96%) rename packages/common/engines/test/{basic => MathRandomEngine}/next-bigint.test.ts (98%) rename packages/common/engines/test/{basic => MathRandomEngine}/next-boolean.test.ts (88%) rename packages/common/engines/test/{basic => MathRandomEngine}/next-float.test.ts (94%) rename packages/common/engines/test/{basic => MathRandomEngine}/next-integer.test.ts (98%) create mode 100644 packages/common/engines/test/index.test.ts diff --git a/packages/common/engines/package.json b/packages/common/engines/package.json index 3bc52eb..a3ca77c 100644 --- a/packages/common/engines/package.json +++ b/packages/common/engines/package.json @@ -1,7 +1,7 @@ { "name": "@grandom/engines", "version": "0.0.0-development", - "description": "Random number generator engines for the grandom library.", + "description": "Various RNG engines for the grandom library.", "author": "Richard King (www.richrdkng.com)", "license": "MIT", "main": "index.js", diff --git a/packages/common/engines/src/crypto/index.ts b/packages/common/engines/src/CrossCryptoEngine/index.ts similarity index 94% rename from packages/common/engines/src/crypto/index.ts rename to packages/common/engines/src/CrossCryptoEngine/index.ts index 3efbcf4..ef67adb 100644 --- a/packages/common/engines/src/crypto/index.ts +++ b/packages/common/engines/src/CrossCryptoEngine/index.ts @@ -1,8 +1,8 @@ import { RandomEngine } from '@grandom/core' -export default class CryptoEngine extends RandomEngine { +export default class CrossCryptoEngine extends RandomEngine { constructor () { - super('crypto') + super('cross-crypto') if (this._isBrowserEnvironment()) { this._next = this._initBrowserCrypto() diff --git a/packages/common/engines/src/mt19937/index.ts b/packages/common/engines/src/MT19937Engine/index.ts similarity index 90% rename from packages/common/engines/src/mt19937/index.ts rename to packages/common/engines/src/MT19937Engine/index.ts index e74b0e9..7717be4 100644 --- a/packages/common/engines/src/mt19937/index.ts +++ b/packages/common/engines/src/MT19937Engine/index.ts @@ -1,3 +1,5 @@ +// TODO: implement seed types instead of any (e.g.: string, number, number[], string[], etc.) + import { RandomEngine } from '@grandom/core' import MT19937 from '@grandom/mt19937' import fnv1a from '@grandom/fnv1a' diff --git a/packages/common/engines/src/basic/index.ts b/packages/common/engines/src/MathRandomEngine/index.ts similarity index 58% rename from packages/common/engines/src/basic/index.ts rename to packages/common/engines/src/MathRandomEngine/index.ts index 01fec2e..4e47125 100644 --- a/packages/common/engines/src/basic/index.ts +++ b/packages/common/engines/src/MathRandomEngine/index.ts @@ -1,8 +1,8 @@ import { RandomEngine } from '@grandom/core' -export default class BasicEngine extends RandomEngine { +export default class MathRandomEngine extends RandomEngine { constructor () { - super('basic') + super('math-random') } _next (): number { diff --git a/packages/common/engines/src/index.ts b/packages/common/engines/src/index.ts index f99d22f..7c5a3b9 100644 --- a/packages/common/engines/src/index.ts +++ b/packages/common/engines/src/index.ts @@ -1,3 +1,7 @@ -export { default as BasicEngine } from './basic' -export { default as CryptoEngine } from './crypto' -export { default as SeededEngine } from './mt19937' +// common engine shorthands +export { default as BasicEngine } from './MathRandomEngine' +export { default as SeededEngine } from './MT19937Engine' +export { default as CryptoEngine } from './CrossCryptoEngine' + +// the default engine is a seedable engine +export { default as DefaultEngine } from './MT19937Engine' diff --git a/packages/common/engines/test/crypto/env.browser.test.ts b/packages/common/engines/test/CrossCryptoEngine/env.browser.test.ts similarity index 94% rename from packages/common/engines/test/crypto/env.browser.test.ts rename to packages/common/engines/test/CrossCryptoEngine/env.browser.test.ts index 8a24d50..92baafa 100644 --- a/packages/common/engines/test/crypto/env.browser.test.ts +++ b/packages/common/engines/test/CrossCryptoEngine/env.browser.test.ts @@ -1,5 +1,5 @@ import crypto from 'node:crypto' -import CryptoEngine from '../../src/crypto' +import CryptoEngine from '../../src/CrossCryptoEngine' describe('CryptoEngine', () => { describe('environments', () => { diff --git a/packages/common/engines/test/crypto/env.no-crypto.test.ts b/packages/common/engines/test/CrossCryptoEngine/env.no-crypto.test.ts similarity index 93% rename from packages/common/engines/test/crypto/env.no-crypto.test.ts rename to packages/common/engines/test/CrossCryptoEngine/env.no-crypto.test.ts index fa010f2..58dd362 100644 --- a/packages/common/engines/test/crypto/env.no-crypto.test.ts +++ b/packages/common/engines/test/CrossCryptoEngine/env.no-crypto.test.ts @@ -1,4 +1,4 @@ -import CryptoEngine from '../../src/crypto' +import CryptoEngine from '../../src/CrossCryptoEngine' describe('CryptoEngine', () => { describe('environments', () => { diff --git a/packages/common/engines/test/crypto/next-bigint.test.ts b/packages/common/engines/test/CrossCryptoEngine/next-bigint.test.ts similarity index 98% rename from packages/common/engines/test/crypto/next-bigint.test.ts rename to packages/common/engines/test/CrossCryptoEngine/next-bigint.test.ts index a46b3bf..a5e3a88 100644 --- a/packages/common/engines/test/crypto/next-bigint.test.ts +++ b/packages/common/engines/test/CrossCryptoEngine/next-bigint.test.ts @@ -3,7 +3,7 @@ import { BigIntStats } from '@testyard/stats' -import CryptoEngine from '../../src/crypto' +import CryptoEngine from '../../src/CrossCryptoEngine' const HALF_LENGTH = LENGTH / 2 const engine = new CryptoEngine() diff --git a/packages/common/engines/test/crypto/next-boolean.test.ts b/packages/common/engines/test/CrossCryptoEngine/next-boolean.test.ts similarity index 88% rename from packages/common/engines/test/crypto/next-boolean.test.ts rename to packages/common/engines/test/CrossCryptoEngine/next-boolean.test.ts index 09f76d5..5275e39 100644 --- a/packages/common/engines/test/crypto/next-boolean.test.ts +++ b/packages/common/engines/test/CrossCryptoEngine/next-boolean.test.ts @@ -3,7 +3,7 @@ import { BooleanStats } from '@testyard/stats' -import CryptoEngine from '../../src/crypto' +import CryptoEngine from '../../src/CrossCryptoEngine' const HALF_LENGTH = LENGTH / 2 const engine = new CryptoEngine() diff --git a/packages/common/engines/test/crypto/next-float.test.ts b/packages/common/engines/test/CrossCryptoEngine/next-float.test.ts similarity index 94% rename from packages/common/engines/test/crypto/next-float.test.ts rename to packages/common/engines/test/CrossCryptoEngine/next-float.test.ts index f53e0de..e1b45f8 100644 --- a/packages/common/engines/test/crypto/next-float.test.ts +++ b/packages/common/engines/test/CrossCryptoEngine/next-float.test.ts @@ -3,7 +3,7 @@ import { FloatStats } from '@testyard/stats' -import CryptoEngine from '../../src/crypto' +import CryptoEngine from '../../src/CrossCryptoEngine' const HALF_LENGTH = LENGTH / 2 const engine = new CryptoEngine() diff --git a/packages/common/engines/test/crypto/next-integer.test.ts b/packages/common/engines/test/CrossCryptoEngine/next-integer.test.ts similarity index 98% rename from packages/common/engines/test/crypto/next-integer.test.ts rename to packages/common/engines/test/CrossCryptoEngine/next-integer.test.ts index 19ea455..a3dc793 100644 --- a/packages/common/engines/test/crypto/next-integer.test.ts +++ b/packages/common/engines/test/CrossCryptoEngine/next-integer.test.ts @@ -3,7 +3,7 @@ import { IntegerStats } from '@testyard/stats' -import CryptoEngine from '../../src/crypto' +import CryptoEngine from '../../src/CrossCryptoEngine' const HALF_LENGTH = LENGTH / 2 const engine = new CryptoEngine() diff --git a/packages/common/engines/test/mt19937/next-bigint.test.ts b/packages/common/engines/test/MT19937Engine/next-bigint.test.ts similarity index 98% rename from packages/common/engines/test/mt19937/next-bigint.test.ts rename to packages/common/engines/test/MT19937Engine/next-bigint.test.ts index 8e447c9..99ff608 100644 --- a/packages/common/engines/test/mt19937/next-bigint.test.ts +++ b/packages/common/engines/test/MT19937Engine/next-bigint.test.ts @@ -3,7 +3,7 @@ import { BigIntStats } from '@testyard/stats' -import MT19937Engine from '../../src/mt19937' +import MT19937Engine from '../../src/MT19937Engine' const engine = new MT19937Engine() diff --git a/packages/common/engines/test/mt19937/next-boolean.test.ts b/packages/common/engines/test/MT19937Engine/next-boolean.test.ts similarity index 88% rename from packages/common/engines/test/mt19937/next-boolean.test.ts rename to packages/common/engines/test/MT19937Engine/next-boolean.test.ts index 2d214b9..d3c71e3 100644 --- a/packages/common/engines/test/mt19937/next-boolean.test.ts +++ b/packages/common/engines/test/MT19937Engine/next-boolean.test.ts @@ -3,7 +3,7 @@ import { BooleanStats } from '@testyard/stats' -import MT19937Engine from '../../src/mt19937' +import MT19937Engine from '../../src/MT19937Engine' const engine = new MT19937Engine() diff --git a/packages/common/engines/test/mt19937/next-float.test.ts b/packages/common/engines/test/MT19937Engine/next-float.test.ts similarity index 94% rename from packages/common/engines/test/mt19937/next-float.test.ts rename to packages/common/engines/test/MT19937Engine/next-float.test.ts index eb05b10..6e8d465 100644 --- a/packages/common/engines/test/mt19937/next-float.test.ts +++ b/packages/common/engines/test/MT19937Engine/next-float.test.ts @@ -3,7 +3,7 @@ import { FloatStats } from '@testyard/stats' -import MT19937Engine from '../../src/mt19937' +import MT19937Engine from '../../src/MT19937Engine' const engine = new MT19937Engine() diff --git a/packages/common/engines/test/mt19937/next-integer.test.ts b/packages/common/engines/test/MT19937Engine/next-integer.test.ts similarity index 98% rename from packages/common/engines/test/mt19937/next-integer.test.ts rename to packages/common/engines/test/MT19937Engine/next-integer.test.ts index e7911c3..50d5ee8 100644 --- a/packages/common/engines/test/mt19937/next-integer.test.ts +++ b/packages/common/engines/test/MT19937Engine/next-integer.test.ts @@ -3,7 +3,7 @@ import { IntegerStats } from '@testyard/stats' -import MT19937Engine from '../../src/mt19937' +import MT19937Engine from '../../src/MT19937Engine' const engine = new MT19937Engine() diff --git a/packages/common/engines/test/mt19937/seed.test.ts b/packages/common/engines/test/MT19937Engine/seed.test.ts similarity index 96% rename from packages/common/engines/test/mt19937/seed.test.ts rename to packages/common/engines/test/MT19937Engine/seed.test.ts index ca73dbd..e24dc2e 100644 --- a/packages/common/engines/test/mt19937/seed.test.ts +++ b/packages/common/engines/test/MT19937Engine/seed.test.ts @@ -1,4 +1,4 @@ -import MT19937Engine from '../../src/mt19937' +import MT19937Engine from '../../src/MT19937Engine' describe('MT19937Engine', () => { describe('set/get seed', () => { diff --git a/packages/common/engines/test/basic/next-bigint.test.ts b/packages/common/engines/test/MathRandomEngine/next-bigint.test.ts similarity index 98% rename from packages/common/engines/test/basic/next-bigint.test.ts rename to packages/common/engines/test/MathRandomEngine/next-bigint.test.ts index 6769c9f..fc4ea83 100644 --- a/packages/common/engines/test/basic/next-bigint.test.ts +++ b/packages/common/engines/test/MathRandomEngine/next-bigint.test.ts @@ -3,7 +3,7 @@ import { BigIntStats } from '@testyard/stats' -import BasicEngine from '../../src/basic' +import BasicEngine from '../../src/MathRandomEngine' const engine = new BasicEngine() diff --git a/packages/common/engines/test/basic/next-boolean.test.ts b/packages/common/engines/test/MathRandomEngine/next-boolean.test.ts similarity index 88% rename from packages/common/engines/test/basic/next-boolean.test.ts rename to packages/common/engines/test/MathRandomEngine/next-boolean.test.ts index 311c0c2..5fde3ff 100644 --- a/packages/common/engines/test/basic/next-boolean.test.ts +++ b/packages/common/engines/test/MathRandomEngine/next-boolean.test.ts @@ -3,7 +3,7 @@ import { BooleanStats } from '@testyard/stats' -import BasicEngine from '../../src/basic' +import BasicEngine from '../../src/MathRandomEngine' const engine = new BasicEngine() diff --git a/packages/common/engines/test/basic/next-float.test.ts b/packages/common/engines/test/MathRandomEngine/next-float.test.ts similarity index 94% rename from packages/common/engines/test/basic/next-float.test.ts rename to packages/common/engines/test/MathRandomEngine/next-float.test.ts index 0824350..225a298 100644 --- a/packages/common/engines/test/basic/next-float.test.ts +++ b/packages/common/engines/test/MathRandomEngine/next-float.test.ts @@ -3,7 +3,7 @@ import { FloatStats } from '@testyard/stats' -import BasicEngine from '../../src/basic' +import BasicEngine from '../../src/MathRandomEngine' const engine = new BasicEngine() diff --git a/packages/common/engines/test/basic/next-integer.test.ts b/packages/common/engines/test/MathRandomEngine/next-integer.test.ts similarity index 98% rename from packages/common/engines/test/basic/next-integer.test.ts rename to packages/common/engines/test/MathRandomEngine/next-integer.test.ts index f59b6aa..a515334 100644 --- a/packages/common/engines/test/basic/next-integer.test.ts +++ b/packages/common/engines/test/MathRandomEngine/next-integer.test.ts @@ -3,7 +3,7 @@ import { IntegerStats } from '@testyard/stats' -import BasicEngine from '../../src/basic' +import BasicEngine from '../../src/MathRandomEngine' const engine = new BasicEngine() diff --git a/packages/common/engines/test/index.test.ts b/packages/common/engines/test/index.test.ts new file mode 100644 index 0000000..4336231 --- /dev/null +++ b/packages/common/engines/test/index.test.ts @@ -0,0 +1,32 @@ +import { + BasicEngine, + SeededEngine, + CryptoEngine, + DefaultEngine +} from '../src' + +describe('@grandom/engines', () => { + test('basic engine', () => { + const engine = new BasicEngine() + + expect(engine.name).toBe('math-random') + }) + + test('seeded engine', () => { + const engine = new SeededEngine() + + expect(engine.name).toBe('mt19937') + }) + + test('crypto engine', () => { + const engine = new CryptoEngine() + + expect(engine.name).toBe('cross-crypto') + }) + + test('default engine', () => { + const engine = new DefaultEngine() + + expect(engine.name).toBe('mt19937') + }) +}) diff --git a/packages/common/engines/umd/index.basic.ts b/packages/common/engines/umd/index.basic.ts index 1ba4f62..cb878ed 100644 --- a/packages/common/engines/umd/index.basic.ts +++ b/packages/common/engines/umd/index.basic.ts @@ -1 +1 @@ -export { default } from '../src/basic' +export { default } from '../src/MathRandomEngine' diff --git a/packages/common/engines/umd/index.crypto.ts b/packages/common/engines/umd/index.crypto.ts index a94266d..673c108 100644 --- a/packages/common/engines/umd/index.crypto.ts +++ b/packages/common/engines/umd/index.crypto.ts @@ -1 +1 @@ -export { default } from '../src/crypto' +export { default } from '../src/CrossCryptoEngine' diff --git a/packages/common/engines/umd/index.seeded.ts b/packages/common/engines/umd/index.seeded.ts index e58e511..f91f5e1 100644 --- a/packages/common/engines/umd/index.seeded.ts +++ b/packages/common/engines/umd/index.seeded.ts @@ -1 +1 @@ -export { default } from '../src/mt19937' +export { default } from '../src/MT19937Engine' diff --git a/packages/common/engines/umd/index.ts b/packages/common/engines/umd/index.ts index 660945d..b734b46 100644 --- a/packages/common/engines/umd/index.ts +++ b/packages/common/engines/umd/index.ts @@ -1,11 +1,13 @@ import { BasicEngine, SeededEngine, - CryptoEngine + CryptoEngine, + DefaultEngine } from '../src' export default { BasicEngine, SeededEngine, - CryptoEngine + CryptoEngine, + DefaultEngine } diff --git a/packages/common/engines/umd/package.json b/packages/common/engines/umd/package.json index cf174a1..68ab976 100644 --- a/packages/common/engines/umd/package.json +++ b/packages/common/engines/umd/package.json @@ -1,7 +1,7 @@ { "name": "@grandom/engines-umd", "version": "0.0.0-development", - "description": "Various UMD builds of random number generator engines for the grandom library.", + "description": "Various UMD builds of RNG engines for the grandom library.", "author": "Richard King (www.richrdkng.com)", "repository": { "type": "git",