1 | var MersenneTwister = require('mersenne-twister');
|
2 |
|
3 |
|
4 | var generator = new MersenneTwister();
|
5 |
|
6 | var array_of = function(n, generator) {
|
7 | var result = [];
|
8 | for (var i = 0; i < n; ++i) {
|
9 | result.push(generator());
|
10 | }
|
11 |
|
12 | return result;
|
13 | };
|
14 |
|
15 | var provider = {
|
16 | integer: function(from, to) {
|
17 | from = typeof from === 'undefined' ? -1000 : from - 0;
|
18 | to = typeof to === 'undefined' ? +1000 : to - 0;
|
19 |
|
20 | return Math.round(from + (to - from) * this.random);
|
21 | },
|
22 |
|
23 | digit: function() {
|
24 | return Math.abs(this.integer(0) % 10);
|
25 | },
|
26 |
|
27 | random: function() {
|
28 | return generator.random();
|
29 | },
|
30 |
|
31 | double: function(from, to) {
|
32 | from = typeof from === 'undefined' ? -1000 : from - 0;
|
33 | to = typeof to === 'undefined' ? +1000 : to - 0;
|
34 |
|
35 | return from + (to - from) * this.random;
|
36 | },
|
37 |
|
38 | array_of_digits: function(n) {
|
39 | n = n || 7;
|
40 | return array_of(n, this._digit);
|
41 | },
|
42 |
|
43 | array_of_integers: function(n) {
|
44 | n = n || 7;
|
45 | return array_of(n, this._integer);
|
46 | },
|
47 |
|
48 | array_of_doubles: function(n) {
|
49 | n = n || 7;
|
50 | return array_of(n, this._double);
|
51 | },
|
52 |
|
53 | coin_flip: function() {
|
54 | return generator.random() < 0.5;
|
55 | },
|
56 |
|
57 | seed: function(seed) {
|
58 | generator.init_seed(seed);
|
59 | }
|
60 | };
|
61 |
|
62 | module.exports = provider;
|