Fix random integer generator
[benchmarks-js.git] / benchmark-utils.js
... / ...
CommitLineData
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
12/**
13 * @param max
14 * @param min
15 * @returns
16 */
17function generateRandomInteger (max = Number.MAX_SAFE_INTEGER, min = 0) {
18 if (max < 0) {
19 throw new RangeError('Invalid interval')
20 }
21 max = Math.floor(max)
22 if (min != null && min !== 0) {
23 if (max < min || min < 0) {
24 throw new RangeError('Invalid interval')
25 }
26 min = Math.ceil(min)
27 return Math.floor(secureRandom() * (max - min + 1)) + min
28 }
29 return Math.floor(secureRandom() * (max + 1))
30}
31
32/**
33 *
34 * @param size
35 * @param max
36 */
37function generateRandomIntegerArray (size, max = Number.MAX_SAFE_INTEGER) {
38 const integerArray = []
39 for (let i = 0; i < size; i++) {
40 integerArray.push(generateRandomInteger(max))
41 }
42 return integerArray
43}
44
45/**
46 * @param ms
47 * @returns
48 */
49async function sleep (ms) {
50 return new Promise(resolve => setTimeout(resolve, ms))
51}
52
53const LIST_FORMATTER = new Intl.ListFormat('en-US', {
54 style: 'long',
55 type: 'conjunction'
56})
57
58module.exports = {
59 generateRandomInteger,
60 generateRandomIntegerArray,
61 sleep,
62 secureRandom,
63 LIST_FORMATTER
64}