1 const crypto
= require('crypto')
4 * Generate a cryptographically secure random number in the [0,1[ range
8 function secureRandom () {
9 return crypto
.randomBytes(4).readUInt32LE() / 0x100000000
17 function generateRandomInteger (max
= Number
.MAX_SAFE_INTEGER
, min
= 0) {
18 if (max
< min
|| max
< 0 || min
< 0) {
19 throw new RangeError('Invalid interval')
22 if (min
!= null && min
!== 0) {
24 return Math
.floor(secureRandom() * (max
- min
+ 1)) + min
26 return Math
.floor(secureRandom() * (max
+ 1))
36 function generateRandomFloat (max
= Number
.MAX_VALUE
, min
= 0, negative
= true) {
37 if (max
< min
|| max
< 0 || min
< 0) {
38 throw new RangeError('Invalid interval')
40 const randomPositiveFloat
= crypto
.randomBytes(4).readUInt32LE() / 0xffffffff
41 const sign
= negative
&& randomPositiveFloat
< 0.5 ? -1 : 1
42 return sign
* (randomPositiveFloat
* (max
- min
) + min
)
49 * @param numberGenerator
52 function generateRandomNumberArray (
54 max
= Number
.MAX_VALUE
,
55 numberGenerator
= generateRandomFloat
58 for (let i
= 0; i
< size
; i
++) {
59 array
.push(numberGenerator(max
))
68 async
function sleep (ms
) {
69 return new Promise(resolve
=> setTimeout(resolve
, ms
))
73 generateRandomInteger
,
75 generateRandomNumberArray
,