X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=random.mjs;h=37bac03bc3ff794aa03f34736a852d5b3785dca1;hb=HEAD;hp=e1062c05c7e4a4d17749645af4d8a271ac0fd547;hpb=95d31631e49a5a39e261745c31f526691dab5f81;p=benchmarks-js.git diff --git a/random.mjs b/random.mjs index e1062c0..e3bd25f 100644 --- a/random.mjs +++ b/random.mjs @@ -1,11 +1,13 @@ -import crypto from 'crypto' -import Benchmark from 'benny' +import { randomInt } from 'node:crypto' + +import { bench, group, run } from 'tatami-ng' + import { secureRandom, - secureRandomWithRandomValues + secureRandomWithRandomValues, } from './benchmark-utils.mjs' -const maximum = 281474976710654 +const maximum = 281474976710655 /** * @param max @@ -17,7 +19,7 @@ function getSecureRandomInteger (max = Number.MAX_SAFE_INTEGER, min = 0) { throw new RangeError('Invalid interval') } max = Math.floor(max) - if (min != null && min !== 0) { + if (min !== 0) { min = Math.ceil(min) return Math.floor(secureRandom() * (max - min + 1)) + min } @@ -37,7 +39,7 @@ function getSecureRandomIntegerWithRandomValues ( throw new RangeError('Invalid interval') } max = Math.floor(max) - if (min != null && min !== 0) { + if (min !== 0) { min = Math.ceil(min) return Math.floor(secureRandomWithRandomValues() * (max - min + 1)) + min } @@ -54,52 +56,28 @@ function getRandomInteger (max = Number.MAX_SAFE_INTEGER, min = 0) { throw new RangeError('Invalid interval') } max = Math.floor(max) - if (min != null && min !== 0) { + if (min !== 0) { min = Math.ceil(min) return Math.floor(Math.random() * (max - min + 1)) + min } return Math.floor(Math.random() * (max + 1)) } -Benchmark.suite( - 'Random Integer Generator', - Benchmark.add('Secure random integer generator', () => { +group('Random Integer Generator', () => { + bench('Secure random integer generator', () => { getSecureRandomInteger(maximum) - }), - Benchmark.add( - 'Secure random with getRandomValues() integer generator', - () => { - getSecureRandomIntegerWithRandomValues(maximum) - } - ), - Benchmark.add('Crypto random integer generator', (max = maximum, min = 0) => { - max = Math.floor(max) - if (min != null && min !== 0) { - min = Math.ceil(min) - return Math.floor(crypto.randomInt(min, max + 1)) - } - return Math.floor(crypto.randomInt(max + 1)) - }), - Benchmark.add('Math random integer generator', () => { + }) + bench('Secure random with getRandomValues() integer generator', () => { + getSecureRandomIntegerWithRandomValues(maximum) + }) + bench('Crypto random integer generator', () => { + randomInt(maximum) + }) + bench('Math random integer generator', () => { getRandomInteger(maximum) - }), - Benchmark.cycle(), - Benchmark.complete(), - Benchmark.save({ - file: 'random-integer-generator', - format: 'json', - details: true - }), - Benchmark.save({ - file: 'random-integer-generator', - format: 'chart.html', - details: true - }), - Benchmark.save({ - file: 'random-integer-generator', - format: 'table.html', - details: true }) -).catch(err => { - console.error(err) +}) + +await run({ + units: true, })