Apply dependencies update
[benchmarks-js.git] / benchmark-utils.js
CommitLineData
343cfe4f
JB
1const crypto = require('crypto')
2
3/**
4 * Generate a cryptographically secure random number in the [0,1[ range
5 *
6 * @returns
7 */
8function secureRandom () {
9 return crypto.randomBytes(4).readUInt32LE() / 0x100000000
10}
11
e9bfc28e
JB
12/**
13 * @param max
14 * @param min
7fd91296 15 * @returns
e9bfc28e 16 */
f10b1da0 17function generateRandomInteger (max = Number.MAX_SAFE_INTEGER, min = 0) {
aa418e78 18 if (max < min || max < 0 || min < 0) {
343cfe4f
JB
19 throw new RangeError('Invalid interval')
20 }
21 max = Math.floor(max)
da504870 22 if (min != null && min !== 0) {
343cfe4f
JB
23 min = Math.ceil(min)
24 return Math.floor(secureRandom() * (max - min + 1)) + min
ed2968f2 25 }
343cfe4f 26 return Math.floor(secureRandom() * (max + 1))
ed2968f2
JB
27}
28
aa418e78
JB
29/**
30 *
31 * @param max
32 * @param min
33 * @param negative
34 * @returns
35 */
36function generateRandomFloat (max = Number.MAX_VALUE, min = 0, negative = true) {
37 if (max < min || max < 0 || min < 0) {
38 throw new RangeError('Invalid interval')
39 }
40 const randomPositiveFloat = crypto.randomBytes(4).readUInt32LE() / 0xffffffff
41 const sign = negative && randomPositiveFloat < 0.5 ? -1 : 1
42 return sign * (randomPositiveFloat * (max - min) + min)
43}
44
ed40d2b0
JB
45/**
46 *
47 * @param size
48 * @param max
feb629fe 49 * @param numberGenerator
67bc7194 50 * @returns
ed40d2b0 51 */
feb629fe
JB
52function generateRandomNumberArray (
53 size,
54 max = Number.MAX_VALUE,
55 numberGenerator = generateRandomFloat
56) {
57 const array = []
ed40d2b0 58 for (let i = 0; i < size; i++) {
feb629fe 59 array.push(numberGenerator(max))
ed40d2b0 60 }
feb629fe
JB
61 return array
62}
63
5b907dbf
JB
64/**
65 *
66 * @param sizeMax
67 * @param numberMax
68 * @param numberGenerator
69 * @returns
70 */
71function generateRandomObject (
72 sizeMax = 500,
73 numberMax = Number.MAX_VALUE,
74 numberGenerator = generateRandomFloat
75) {
76 const size = generateRandomInteger(sizeMax)
77 const object = {}
78 for (let i = 0; i < size; i++) {
79 object[i.toString()] = numberGenerator(numberMax)
80 }
8e1fbc06 81 return object
5b907dbf
JB
82}
83
a9c78d5d
JB
84/**
85 * @param ms
7fd91296 86 * @returns
a9c78d5d
JB
87 */
88async function sleep (ms) {
89 return new Promise(resolve => setTimeout(resolve, ms))
90}
91
ed40d2b0
JB
92module.exports = {
93 generateRandomInteger,
feb629fe
JB
94 generateRandomFloat,
95 generateRandomNumberArray,
5b907dbf 96 generateRandomObject,
ed40d2b0 97 sleep,
2bacb639 98 secureRandom
ed40d2b0 99}