UNPKG

@technobuddha/library

Version:
90 lines (71 loc) 3.59 kB
import { MersenneTwister } from './mersenne-twister.ts'; describe('MersenneTwister', () => { test('should generate same random int32 from seed', () => { const mt = new MersenneTwister(0); expect(mt.genrandInt32()).toBe(293910048); expect(mt.genrandInt32()).toBe(417317171); expect(mt.genrandInt32()).toBe(2036186861); expect(mt.genrandInt32()).toBe(1160412725); expect(mt.genrandInt32()).toBe(338713629); expect(mt.genrandInt32()).toBe(1008941840); }); test('should generate same random int31 from seed', () => { const mt = new MersenneTwister(0); expect(mt.genrandInt31()).toBe(146955024); expect(mt.genrandInt31()).toBe(208658585); expect(mt.genrandInt31()).toBe(1018093430); expect(mt.genrandInt31()).toBe(580206362); expect(mt.genrandInt31()).toBe(169356814); expect(mt.genrandInt31()).toBe(504470920); }); test('should generate same random real1 from seed', () => { const mt = new MersenneTwister(0); expect(mt.genrandReal1()).toBeCloseTo(0.0684312656681126, 15); expect(mt.genrandReal1()).toBeCloseTo(0.0971642255543647, 15); expect(mt.genrandReal1()).toBeCloseTo(0.4740866975565643, 15); expect(mt.genrandReal1()).toBeCloseTo(0.2701796417287969, 15); expect(mt.genrandReal1()).toBeCloseTo(0.0788629122727697, 15); expect(mt.genrandReal1()).toBeCloseTo(0.2349125780712144, 15); }); test('should generate same random real2 from seed', () => { const mt = new MersenneTwister(0); expect(mt.genrandReal2()).toBeCloseTo(0.0684312656521797, 15); expect(mt.genrandReal2()).toBeCloseTo(0.0971642255317419, 15); expect(mt.genrandReal2()).toBeCloseTo(0.4740866974461823, 15); expect(mt.genrandReal2()).toBeCloseTo(0.2701796416658908, 15); expect(mt.genrandReal2()).toBeCloseTo(0.078862912254408, 15); expect(mt.genrandReal2()).toBeCloseTo(0.2349125780165195, 15); }); test('should generate same random real3 from seed', () => { const mt = new MersenneTwister(0); expect(mt.genrandReal3()).toBeCloseTo(0.068431265768595, 15); expect(mt.genrandReal3()).toBeCloseTo(0.0971642256481573, 15); expect(mt.genrandReal3()).toBeCloseTo(0.4740866975625977, 15); expect(mt.genrandReal3()).toBeCloseTo(0.2701796417823061, 15); expect(mt.genrandReal3()).toBeCloseTo(0.0788629123708233, 15); expect(mt.genrandReal3()).toBeCloseTo(0.2349125781329348, 15); }); test('should generate same random res53 from seed', () => { const mt = new MersenneTwister(0); expect(mt.genrandRes53()).toBeCloseTo(0.0684312663761095, 15); expect(mt.genrandRes53()).toBeCloseTo(0.4740866964323791, 15); expect(mt.genrandRes53()).toBeCloseTo(0.0788629072525544, 15); expect(mt.genrandRes53()).toBeCloseTo(0.287578644146807, 15); expect(mt.genrandRes53()).toBeCloseTo(0.2310116773870166, 15); expect(mt.genrandRes53()).toBeCloseTo(0.0952395144272963, 15); }); test('should generate same random int32 from array seed', () => { const mt = new MersenneTwister(Array.from({ length: 100 }).fill(0) as number[]); expect(mt.genrandInt32()).toBe(1434223582); expect(mt.genrandInt32()).toBe(1450191270); }); test('should generate same random int31 from array seed', () => { const mt = new MersenneTwister(Array.from({ length: 1000 }).fill(0) as number[]); expect(mt.genrandInt32()).toBe(1914342825); expect(mt.genrandInt32()).toBe(305667567); }); test('should generate random int32', () => { const mt = new MersenneTwister(); expect(mt.genrandInt32()).toBeLessThanOrEqual(0xffffffff); }); });