test: add updateMeasurementStatistics() behavior test
[poolifier.git] / tests / utils.test.js
CommitLineData
aba955e1 1const { expect } = require('expect')
afe0d5bf
JB
2const {
3 availableParallelism,
78ac1a90 4 isAsyncFunction,
59317253 5 isKillBehavior,
afe0d5bf
JB
6 isPlainObject,
7 median,
a91f7b35
JB
8 round,
9 updateMeasurementStatistics
afe0d5bf 10} = require('../lib/utils')
59317253 11const { KillBehaviors } = require('../lib/worker/worker-options')
aba955e1
JB
12
13describe('Utils test suite', () => {
afe0d5bf
JB
14 it('Verify availableParallelism() behavior', () => {
15 expect(typeof availableParallelism() === 'number').toBe(true)
16 })
17
bb615bd0 18 it('Verify median() computation', () => {
4a45e8d2 19 expect(median([])).toBe(0)
76845835
JB
20 expect(median([0.08])).toBe(0.08)
21 expect(median([0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03])).toBe(3.05)
22 expect(median([0.25, 4.75, 3.05, 6.04, 1.01, 2.02])).toBe(2.535)
aba955e1
JB
23 })
24
afe0d5bf
JB
25 it('Verify round() behavior', () => {
26 expect(round(0)).toBe(0)
27 expect(round(0.5, 0)).toBe(1)
28 expect(round(0.5)).toBe(0.5)
29 expect(round(-0.5, 0)).toBe(-1)
30 expect(round(-0.5)).toBe(-0.5)
31 expect(round(1.005)).toBe(1.01)
32 expect(round(2.175)).toBe(2.18)
33 expect(round(5.015)).toBe(5.02)
34 expect(round(-1.005)).toBe(-1.01)
35 expect(round(-2.175)).toBe(-2.18)
36 expect(round(-5.015)).toBe(-5.02)
37 })
38
aba955e1
JB
39 it('Verify isPlainObject() behavior', () => {
40 expect(isPlainObject(null)).toBe(false)
41 expect(isPlainObject(undefined)).toBe(false)
42 expect(isPlainObject(true)).toBe(false)
43 expect(isPlainObject(false)).toBe(false)
44 expect(isPlainObject(0)).toBe(false)
45 expect(isPlainObject('')).toBe(false)
46 expect(isPlainObject([])).toBe(false)
47 expect(isPlainObject(() => {})).toBe(false)
48 expect(isPlainObject(new Date())).toBe(false)
49 expect(isPlainObject(new RegExp())).toBe(false)
50 expect(isPlainObject(new Error())).toBe(false)
51 expect(isPlainObject(new Map())).toBe(false)
52 expect(isPlainObject(new Set())).toBe(false)
53 expect(isPlainObject(new WeakMap())).toBe(false)
54 expect(isPlainObject(new WeakSet())).toBe(false)
55 expect(isPlainObject(new Int8Array())).toBe(false)
56 expect(isPlainObject(new Uint8Array())).toBe(false)
57 expect(isPlainObject(new Uint8ClampedArray())).toBe(false)
58 expect(isPlainObject(new Int16Array())).toBe(false)
59 expect(isPlainObject(new Uint16Array())).toBe(false)
60 expect(isPlainObject(new Int32Array())).toBe(false)
61 expect(isPlainObject(new Uint32Array())).toBe(false)
62 expect(isPlainObject(new Float32Array())).toBe(false)
63 expect(isPlainObject(new Float64Array())).toBe(false)
64 expect(isPlainObject(new BigInt64Array())).toBe(false)
65 expect(isPlainObject(new BigUint64Array())).toBe(false)
66 expect(isPlainObject(new Promise(() => {}))).toBe(false)
67 expect(isPlainObject(new WeakRef({}))).toBe(false)
68 expect(isPlainObject(new FinalizationRegistry(() => {}))).toBe(false)
69 expect(isPlainObject(new ArrayBuffer())).toBe(false)
70 expect(isPlainObject(new SharedArrayBuffer())).toBe(false)
71 expect(isPlainObject(new DataView(new ArrayBuffer()))).toBe(false)
72 expect(isPlainObject({})).toBe(true)
73 expect(isPlainObject({ a: 1 })).toBe(true)
74 })
47aacbaa
JB
75
76 it('Verify isKillBehavior() behavior', () => {
77 expect(isKillBehavior(KillBehaviors.SOFT, KillBehaviors.SOFT)).toBe(true)
78 expect(isKillBehavior(KillBehaviors.SOFT, KillBehaviors.HARD)).toBe(false)
79 expect(isKillBehavior(KillBehaviors.HARD, KillBehaviors.HARD)).toBe(true)
80 expect(isKillBehavior(KillBehaviors.HARD, KillBehaviors.SOFT)).toBe(false)
81 expect(isKillBehavior(KillBehaviors.SOFT)).toBe(false)
82 expect(isKillBehavior(KillBehaviors.HARD)).toBe(false)
83 expect(isKillBehavior(KillBehaviors.HARD, null)).toBe(false)
78ac1a90 84 expect(isKillBehavior(KillBehaviors.HARD, undefined)).toBe(false)
47aacbaa
JB
85 expect(isKillBehavior(KillBehaviors.SOFT, 'unknown')).toBe(false)
86 })
78ac1a90
JB
87
88 it('Verify isAsyncFunction() behavior', () => {
89 expect(isAsyncFunction(null)).toBe(false)
90 expect(isAsyncFunction(undefined)).toBe(false)
91 expect(isAsyncFunction(true)).toBe(false)
92 expect(isAsyncFunction(false)).toBe(false)
93 expect(isAsyncFunction(0)).toBe(false)
94 expect(isAsyncFunction('')).toBe(false)
95 expect(isAsyncFunction([])).toBe(false)
96 expect(isAsyncFunction(new Date())).toBe(false)
97 expect(isAsyncFunction(new RegExp())).toBe(false)
98 expect(isAsyncFunction(new Error())).toBe(false)
99 expect(isAsyncFunction(new Map())).toBe(false)
100 expect(isAsyncFunction(new Set())).toBe(false)
101 expect(isAsyncFunction(new WeakMap())).toBe(false)
102 expect(isAsyncFunction(new WeakSet())).toBe(false)
103 expect(isAsyncFunction(new Int8Array())).toBe(false)
104 expect(isAsyncFunction(new Uint8Array())).toBe(false)
105 expect(isAsyncFunction(new Uint8ClampedArray())).toBe(false)
106 expect(isAsyncFunction(new Int16Array())).toBe(false)
107 expect(isAsyncFunction(new Uint16Array())).toBe(false)
108 expect(isAsyncFunction(new Int32Array())).toBe(false)
109 expect(isAsyncFunction(new Uint32Array())).toBe(false)
110 expect(isAsyncFunction(new Float32Array())).toBe(false)
111 expect(isAsyncFunction(new Float64Array())).toBe(false)
112 expect(isAsyncFunction(new BigInt64Array())).toBe(false)
113 expect(isAsyncFunction(new BigUint64Array())).toBe(false)
114 expect(isAsyncFunction(new Promise(() => {}))).toBe(false)
115 expect(isAsyncFunction(new WeakRef({}))).toBe(false)
116 expect(isAsyncFunction(new FinalizationRegistry(() => {}))).toBe(false)
117 expect(isAsyncFunction(new ArrayBuffer())).toBe(false)
118 expect(isAsyncFunction(new SharedArrayBuffer())).toBe(false)
119 expect(isAsyncFunction(new DataView(new ArrayBuffer()))).toBe(false)
120 expect(isAsyncFunction({})).toBe(false)
121 expect(isAsyncFunction({ a: 1 })).toBe(false)
122 expect(isAsyncFunction(() => {})).toBe(false)
123 expect(isAsyncFunction(function () {})).toBe(false)
124 expect(isAsyncFunction(function named () {})).toBe(false)
125 expect(isAsyncFunction(async () => {})).toBe(true)
126 expect(isAsyncFunction(async function () {})).toBe(true)
127 expect(isAsyncFunction(async function named () {})).toBe(true)
128 })
a91f7b35
JB
129
130 it('Verify updateMeasurementStatistics() behavior', () => {
131 const measurementStatistics = {}
132 updateMeasurementStatistics(
133 measurementStatistics,
134 { aggregate: true, average: false, median: false },
135 0.01,
136 1
137 )
138 expect(measurementStatistics).toEqual({
139 aggregate: 0.01,
140 maximum: 0.01,
141 minimum: 0.01
142 })
143 updateMeasurementStatistics(
144 measurementStatistics,
145 { aggregate: true, average: false, median: false },
146 0.02,
147 2
148 )
149 expect(measurementStatistics).toEqual({
150 aggregate: 0.03,
151 maximum: 0.02,
152 minimum: 0.01
153 })
154 updateMeasurementStatistics(
155 measurementStatistics,
156 { aggregate: true, average: true, median: false },
157 0.001,
158 3
159 )
160 expect(measurementStatistics).toEqual({
161 aggregate: 0.031,
162 maximum: 0.02,
163 minimum: 0.001,
164 average: 0.010333333333333333
165 })
166 })
aba955e1 167})