Merge pull request #1 from jerome-benoit/dependabot/npm_and_yarn/nanoid-3.2.0
[benchmarks-js.git] / busy-wait.js
CommitLineData
ed2968f2 1const Benchmark = require('benchmark')
a9c78d5d 2const { LIST_FORMATTER, sleep } = require('./benchmark-utils')
ed2968f2
JB
3
4const suite = new Benchmark.Suite()
5
6const timeout = 2000
a8bf8b7d 7const interval = 1000
ed2968f2 8
a6c34381
JB
9/**
10 * @param timeoutMs
11 */
12function dummyTimeoutBusyWait (timeoutMs) {
13 const timeoutTimestampMs = Date.now() + timeoutMs
14 do {} while (Date.now() < timeoutTimestampMs)
15}
16
e9bfc28e
JB
17/**
18 * @param timeoutMs
19 */
a8bf8b7d 20async function sleepTimeoutBusyWait (timeoutMs) {
a9c78d5d 21 const timeoutTimestampMs = Date.now() + timeoutMs
a8bf8b7d
JB
22 do {
23 await sleep(interval)
24 } while (Date.now() < timeoutTimestampMs)
a9c78d5d
JB
25}
26
27/**
28 * @param timeoutMs
e47f67db 29 * @param intervalMs
a9c78d5d 30 */
a8bf8b7d
JB
31async function divideAndConquerTimeoutBusyWait (
32 timeoutMs,
33 intervalMs = interval
34) {
e47f67db 35 const tries = Math.round(timeoutMs / intervalMs)
a9c78d5d
JB
36 let count = 0
37 do {
38 count++
e47f67db 39 await sleep(intervalMs)
a9c78d5d 40 } while (count <= tries)
ed2968f2
JB
41}
42
e9bfc28e
JB
43/**
44 * @param timeoutMs
e47f67db 45 * @param intervalMs
e9bfc28e 46 */
a8bf8b7d 47function setIntervalTimeoutBusyWait (timeoutMs, intervalMs = interval) {
e47f67db 48 const tries = Math.round(timeoutMs / intervalMs)
ed2968f2
JB
49 let count = 0
50 const triesSetInterval = setInterval(() => {
51 count++
52 if (count === tries) {
53 clearInterval(triesSetInterval)
54 }
e47f67db 55 }, intervalMs)
ed2968f2
JB
56}
57
58suite
a6c34381
JB
59 .add('dummyTimeoutBusyWait', function () {
60 dummyTimeoutBusyWait(timeout)
61 })
a8bf8b7d
JB
62 .add('sleepTimeoutBusyWait', async function () {
63 sleepTimeoutBusyWait(timeout)
ed2968f2 64 })
a9c78d5d
JB
65 .add('divideAndConquerTimeoutBusyWait', async function () {
66 await divideAndConquerTimeoutBusyWait(timeout)
67 })
ed2968f2
JB
68 .add('setIntervalTimeoutBusyWait', function () {
69 setIntervalTimeoutBusyWait(timeout)
70 })
71 .on('cycle', function (event) {
72 console.log(event.target.toString())
73 })
74 .on('complete', function () {
75 console.log(
76 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
77 )
78 // eslint-disable-next-line no-process-exit
79 process.exit()
80 })
81 .run()