diff options
| author | Marak <[email protected]> | 2021-03-25 14:46:39 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-03-25 14:46:39 -0400 |
| commit | 149289afa955d81bed410104d5f034eb1495fe9d (patch) | |
| tree | 48b4aaca32521d917a10ca5da4de32a0763d8e51 | |
| parent | 38d8187c3501d5efe3d5644167d4a8174cde6037 (diff) | |
| parent | eb3a5d23babd2ce0187b7aa761f745c5726e27ac (diff) | |
| download | faker-149289afa955d81bed410104d5f034eb1495fe9d.tar.xz faker-149289afa955d81bed410104d5f034eb1495fe9d.zip | |
Merge pull request #1147 from cowboyd/one-random-number-generator-per-faker
Give each faker instance its own random number generator
| -rw-r--r-- | lib/datatype.js | 8 | ||||
| -rw-r--r-- | lib/index.js | 3 | ||||
| -rw-r--r-- | lib/mersenne.js | 31 | ||||
| -rw-r--r-- | lib/random.js | 6 | ||||
| -rw-r--r-- | test/random.unit.js | 2 | ||||
| -rw-r--r-- | test/support/function-helpers.js | 2 | ||||
| -rw-r--r-- | vendor/mersenne.js | 28 |
7 files changed, 41 insertions, 39 deletions
diff --git a/lib/datatype.js b/lib/datatype.js index d2ec9ad2..02ea3759 100644 --- a/lib/datatype.js +++ b/lib/datatype.js @@ -1,5 +1,3 @@ -var mersenne = require('../vendor/mersenne');
-
/**
*
* @namespace faker.datatype
@@ -7,10 +5,10 @@ var mersenne = require('../vendor/mersenne'); function Datatype (faker, seed) {
// Use a user provided seed if it is an array or number
if (Array.isArray(seed) && seed.length) {
- mersenne.seed_array(seed);
+ faker.mersenne.seed_array(seed);
}
else if(!isNaN(seed)) {
- mersenne.seed(seed);
+ faker.mersenne.seed(seed);
}
/**
@@ -47,7 +45,7 @@ function Datatype (faker, seed) { }
var randomNumber = Math.floor(
- mersenne.rand(max / options.precision, options.min / options.precision));
+ faker.mersenne.rand(max / options.precision, options.min / options.precision));
// Workaround problem in Float point arithmetics for e.g. 6681493 / 0.01
randomNumber = randomNumber / (1 / options.precision);
diff --git a/lib/index.js b/lib/index.js index f76a581e..a80580bd 100644 --- a/lib/index.js +++ b/lib/index.js @@ -92,6 +92,9 @@ function Faker (opts) { var Unique = require('./unique'); self.unique = new Unique(self).unique; + var Mersenne = require('./mersenne'); + self.mersenne = new Mersenne(); + var Random = require('./random'); self.random = new Random(self); diff --git a/lib/mersenne.js b/lib/mersenne.js new file mode 100644 index 00000000..722ebc46 --- /dev/null +++ b/lib/mersenne.js @@ -0,0 +1,31 @@ +var Gen = require('../vendor/mersenne').MersenneTwister19937; + +function Mersenne() { + var gen = new Gen(); + gen.init_genrand((new Date).getTime() % 1000000000); + + this.rand = function(max, min) { + if (max === undefined) + { + min = 0; + max = 32768; + } + return Math.floor(gen.genrand_real2() * (max - min) + min); + } + this.seed = function(S) { + if (typeof(S) != 'number') + { + throw new Error("seed(S) must take numeric argument; is " + typeof(S)); + } + gen.init_genrand(S); + } + this.seed_array = function(A) { + if (typeof(A) != 'object') + { + throw new Error("seed_array(A) must take array of numbers; is " + typeof(A)); + } + gen.init_by_array(A, A.length); + } +} + +module.exports = Mersenne; diff --git a/lib/random.js b/lib/random.js index 4c2daaac..4443c555 100644 --- a/lib/random.js +++ b/lib/random.js @@ -1,5 +1,3 @@ -var mersenne = require('../vendor/mersenne'); - /** * Method to reduce array of characters * @param arr existing array of characters @@ -22,10 +20,10 @@ var arrayRemove = function (arr, values) { function Random (faker, seed) { // Use a user provided seed if it is an array or number if (Array.isArray(seed) && seed.length) { - mersenne.seed_array(seed); + faker.mersenne.seed_array(seed); } else if(!isNaN(seed)) { - mersenne.seed(seed); + faker.mersenne.seed(seed); } /** diff --git a/test/random.unit.js b/test/random.unit.js index 147d7dbb..b45d347d 100644 --- a/test/random.unit.js +++ b/test/random.unit.js @@ -3,7 +3,7 @@ if (typeof module !== 'undefined') { var sinon = require('sinon'); var _ = require('lodash'); var faker = require('../index'); - var mersenne = require('../vendor/mersenne'); + var mersenne = new (require('../lib/mersenne')); } diff --git a/test/support/function-helpers.js b/test/support/function-helpers.js index 326da61a..5411ac71 100644 --- a/test/support/function-helpers.js +++ b/test/support/function-helpers.js @@ -9,7 +9,7 @@ var functionHelpers = {}; module.exports = functionHelpers; -var IGNORED_MODULES = ['locales', 'locale', 'localeFallback', 'definitions', 'fake', 'helpers']; +var IGNORED_MODULES = ['locales', 'locale', 'localeFallback', 'definitions', 'fake', 'helpers', 'mersenne']; var IGNORED_METHODS = { system: ['directoryPath', 'filePath'] // these are TODOs }; diff --git a/vendor/mersenne.js b/vendor/mersenne.js index edc4743c..4d9d0322 100644 --- a/vendor/mersenne.js +++ b/vendor/mersenne.js @@ -256,31 +256,3 @@ function MersenneTwister19937() // Export the twister class exports.MersenneTwister19937 = MersenneTwister19937; - -// Export a simplified function to generate random numbers -var gen = new MersenneTwister19937; -gen.init_genrand((new Date).getTime() % 1000000000); - -// Added max, min range functionality, Marak Squires Sept 11 2014 -exports.rand = function(max, min) { - if (max === undefined) - { - min = 0; - max = 32768; - } - return Math.floor(gen.genrand_real2() * (max - min) + min); -} -exports.seed = function(S) { - if (typeof(S) != 'number') - { - throw new Error("seed(S) must take numeric argument; is " + typeof(S)); - } - gen.init_genrand(S); -} -exports.seed_array = function(A) { - if (typeof(A) != 'object') - { - throw new Error("seed_array(A) must take array of numbers; is " + typeof(A)); - } - gen.init_by_array(A, A.length); -}
\ No newline at end of file |
