123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- var MersenneTwister = require('../');
- var g = new MersenneTwister();
- describe('Generator', function() {
- it('Should repeat random sequence on same seed', function() {
- var seed = 123;
- g.init_seed(seed);
- var first_1 = g.random();
- var first_2 = g.random();
- g.init_seed(seed);
- var second_1 = g.random();
- var second_2 = g.random();
- first_1.should.be.exactly(second_1);
- first_2.should.be.exactly(second_2);
- });
- it('Should allow seeding via constructor', function() {
- var seed = 325;
- var g1 = new MersenneTwister(seed);
- var g2 = new MersenneTwister(seed);
- for (var i = 0; i < 5; ++i) {
- g1.random().should.be.exactly(g2.random());
- }
- });
- it('Should roughly match Python when seeded by array', function() {
- var seed1 = 0;
- var seed2 = 42;
- var g1 = new MersenneTwister([seed1]);
- var g2 = new MersenneTwister([seed2]);
- /* We should get a near exact match with Python's rng
- * when we seed by array. The code for generating
- * these comparison values is something like:
- import random
- r = random.Random(0)
- for i in range(10000000):
- x = r.random()
- if i % 1000000 == 0: print(x)
- */
- var values1 = [0.84442, 0.34535, 0.25570, 0.32368, 0.89075];
- var values2 = [0.63942, 0.55564, 0.55519, 0.81948, 0.94333];
- for (var i = 0; i < 5000000; i++) {
- var rval1 = g1.random_long();
- var rval2 = g2.random_long();
- if (i % 1000000 == 0) {
- var idx = i / 1000000;
- rval1.should.be.approximately(values1[idx], 1e-5);
- rval2.should.be.approximately(values2[idx], 1e-5);
- }
- }
- });
- });
|