Bump prettier from 2.8.5 to 2.8.6
[benchmarks-js.git] / benchmark-utils.js
1 const crypto = require('crypto')
2
3 /**
4 * Generate a cryptographically secure random number in the [0,1[ range
5 *
6 * @returns
7 */
8 function secureRandom () {
9 return crypto.randomBytes(4).readUInt32LE() / 0x100000000
10 }
11
12 /**
13 * Generate a cryptographically secure random number in the [0,1[ range
14 *
15 * @returns
16 */
17 function secureRandomWithRandomValues () {
18 return crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000
19 }
20
21 /**
22 * @param max
23 * @param min
24 * @returns
25 */
26 function generateRandomInteger (max = Number.MAX_SAFE_INTEGER, min = 0) {
27 if (max < min || max < 0 || min < 0) {
28 throw new RangeError('Invalid interval')
29 }
30 max = Math.floor(max)
31 if (min != null && min !== 0) {
32 min = Math.ceil(min)
33 return Math.floor(secureRandom() * (max - min + 1)) + min
34 }
35 return Math.floor(secureRandom() * (max + 1))
36 }
37
38 /**
39 *
40 * @param max
41 * @param min
42 * @returns
43 */
44 function generateRandomFloat (max = Number.MAX_VALUE, min = 0) {
45 if (max < min) {
46 throw new RangeError('Invalid interval')
47 }
48 if (max - min === Infinity) {
49 throw new RangeError('Invalid interval')
50 }
51 return (crypto.randomBytes(4).readUInt32LE() / 0xffffffff) * (max - min) + min
52 }
53
54 /**
55 *
56 * @param size
57 * @param max
58 * @param numberGenerator
59 * @returns
60 */
61 function generateRandomNumberArray (
62 size,
63 max = Number.MAX_VALUE,
64 numberGenerator = generateRandomFloat
65 ) {
66 const array = []
67 for (let i = 0; i < size; i++) {
68 array.push(numberGenerator(max))
69 }
70 return array
71 }
72
73 /**
74 *
75 * @param sizeMax
76 * @param numberMax
77 * @param numberGenerator
78 * @returns
79 */
80 function generateRandomObject (
81 sizeMax = 500,
82 numberMax = Number.MAX_VALUE,
83 numberGenerator = generateRandomFloat
84 ) {
85 const size = generateRandomInteger(sizeMax)
86 const object = {}
87 for (let i = 0; i < size; i++) {
88 object[i.toString()] = numberGenerator(numberMax)
89 }
90 return object
91 }
92
93 /**
94 * @param ms
95 * @returns
96 */
97 async function sleep (ms) {
98 return new Promise(resolve => setTimeout(resolve, ms))
99 }
100
101 module.exports = {
102 generateRandomInteger,
103 generateRandomFloat,
104 generateRandomNumberArray,
105 generateRandomObject,
106 sleep,
107 secureRandom,
108 secureRandomWithRandomValues
109 }