refactor: factor out measurement statistics update
[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,
8 round
9} = require('../lib/utils')
59317253 10const { KillBehaviors } = require('../lib/worker/worker-options')
aba955e1
JB
11
12describe('Utils test suite', () => {
afe0d5bf
JB
13 it('Verify availableParallelism() behavior', () => {
14 expect(typeof availableParallelism() === 'number').toBe(true)
15 })
16
bb615bd0 17 it('Verify median() computation', () => {
4a45e8d2 18 expect(median([])).toBe(0)
76845835
JB
19 expect(median([0.08])).toBe(0.08)
20 expect(median([0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03])).toBe(3.05)
21 expect(median([0.25, 4.75, 3.05, 6.04, 1.01, 2.02])).toBe(2.535)
aba955e1
JB
22 })
23
afe0d5bf
JB
24 it('Verify round() behavior', () => {
25 expect(round(0)).toBe(0)
26 expect(round(0.5, 0)).toBe(1)
27 expect(round(0.5)).toBe(0.5)
28 expect(round(-0.5, 0)).toBe(-1)
29 expect(round(-0.5)).toBe(-0.5)
30 expect(round(1.005)).toBe(1.01)
31 expect(round(2.175)).toBe(2.18)
32 expect(round(5.015)).toBe(5.02)
33 expect(round(-1.005)).toBe(-1.01)
34 expect(round(-2.175)).toBe(-2.18)
35 expect(round(-5.015)).toBe(-5.02)
36 })
37
aba955e1
JB
38 it('Verify isPlainObject() behavior', () => {
39 expect(isPlainObject(null)).toBe(false)
40 expect(isPlainObject(undefined)).toBe(false)
41 expect(isPlainObject(true)).toBe(false)
42 expect(isPlainObject(false)).toBe(false)
43 expect(isPlainObject(0)).toBe(false)
44 expect(isPlainObject('')).toBe(false)
45 expect(isPlainObject([])).toBe(false)
46 expect(isPlainObject(() => {})).toBe(false)
47 expect(isPlainObject(new Date())).toBe(false)
48 expect(isPlainObject(new RegExp())).toBe(false)
49 expect(isPlainObject(new Error())).toBe(false)
50 expect(isPlainObject(new Map())).toBe(false)
51 expect(isPlainObject(new Set())).toBe(false)
52 expect(isPlainObject(new WeakMap())).toBe(false)
53 expect(isPlainObject(new WeakSet())).toBe(false)
54 expect(isPlainObject(new Int8Array())).toBe(false)
55 expect(isPlainObject(new Uint8Array())).toBe(false)
56 expect(isPlainObject(new Uint8ClampedArray())).toBe(false)
57 expect(isPlainObject(new Int16Array())).toBe(false)
58 expect(isPlainObject(new Uint16Array())).toBe(false)
59 expect(isPlainObject(new Int32Array())).toBe(false)
60 expect(isPlainObject(new Uint32Array())).toBe(false)
61 expect(isPlainObject(new Float32Array())).toBe(false)
62 expect(isPlainObject(new Float64Array())).toBe(false)
63 expect(isPlainObject(new BigInt64Array())).toBe(false)
64 expect(isPlainObject(new BigUint64Array())).toBe(false)
65 expect(isPlainObject(new Promise(() => {}))).toBe(false)
66 expect(isPlainObject(new WeakRef({}))).toBe(false)
67 expect(isPlainObject(new FinalizationRegistry(() => {}))).toBe(false)
68 expect(isPlainObject(new ArrayBuffer())).toBe(false)
69 expect(isPlainObject(new SharedArrayBuffer())).toBe(false)
70 expect(isPlainObject(new DataView(new ArrayBuffer()))).toBe(false)
71 expect(isPlainObject({})).toBe(true)
72 expect(isPlainObject({ a: 1 })).toBe(true)
73 })
47aacbaa
JB
74
75 it('Verify isKillBehavior() behavior', () => {
76 expect(isKillBehavior(KillBehaviors.SOFT, KillBehaviors.SOFT)).toBe(true)
77 expect(isKillBehavior(KillBehaviors.SOFT, KillBehaviors.HARD)).toBe(false)
78 expect(isKillBehavior(KillBehaviors.HARD, KillBehaviors.HARD)).toBe(true)
79 expect(isKillBehavior(KillBehaviors.HARD, KillBehaviors.SOFT)).toBe(false)
80 expect(isKillBehavior(KillBehaviors.SOFT)).toBe(false)
81 expect(isKillBehavior(KillBehaviors.HARD)).toBe(false)
82 expect(isKillBehavior(KillBehaviors.HARD, null)).toBe(false)
78ac1a90 83 expect(isKillBehavior(KillBehaviors.HARD, undefined)).toBe(false)
47aacbaa
JB
84 expect(isKillBehavior(KillBehaviors.SOFT, 'unknown')).toBe(false)
85 })
78ac1a90
JB
86
87 it('Verify isAsyncFunction() behavior', () => {
88 expect(isAsyncFunction(null)).toBe(false)
89 expect(isAsyncFunction(undefined)).toBe(false)
90 expect(isAsyncFunction(true)).toBe(false)
91 expect(isAsyncFunction(false)).toBe(false)
92 expect(isAsyncFunction(0)).toBe(false)
93 expect(isAsyncFunction('')).toBe(false)
94 expect(isAsyncFunction([])).toBe(false)
95 expect(isAsyncFunction(new Date())).toBe(false)
96 expect(isAsyncFunction(new RegExp())).toBe(false)
97 expect(isAsyncFunction(new Error())).toBe(false)
98 expect(isAsyncFunction(new Map())).toBe(false)
99 expect(isAsyncFunction(new Set())).toBe(false)
100 expect(isAsyncFunction(new WeakMap())).toBe(false)
101 expect(isAsyncFunction(new WeakSet())).toBe(false)
102 expect(isAsyncFunction(new Int8Array())).toBe(false)
103 expect(isAsyncFunction(new Uint8Array())).toBe(false)
104 expect(isAsyncFunction(new Uint8ClampedArray())).toBe(false)
105 expect(isAsyncFunction(new Int16Array())).toBe(false)
106 expect(isAsyncFunction(new Uint16Array())).toBe(false)
107 expect(isAsyncFunction(new Int32Array())).toBe(false)
108 expect(isAsyncFunction(new Uint32Array())).toBe(false)
109 expect(isAsyncFunction(new Float32Array())).toBe(false)
110 expect(isAsyncFunction(new Float64Array())).toBe(false)
111 expect(isAsyncFunction(new BigInt64Array())).toBe(false)
112 expect(isAsyncFunction(new BigUint64Array())).toBe(false)
113 expect(isAsyncFunction(new Promise(() => {}))).toBe(false)
114 expect(isAsyncFunction(new WeakRef({}))).toBe(false)
115 expect(isAsyncFunction(new FinalizationRegistry(() => {}))).toBe(false)
116 expect(isAsyncFunction(new ArrayBuffer())).toBe(false)
117 expect(isAsyncFunction(new SharedArrayBuffer())).toBe(false)
118 expect(isAsyncFunction(new DataView(new ArrayBuffer()))).toBe(false)
119 expect(isAsyncFunction({})).toBe(false)
120 expect(isAsyncFunction({ a: 1 })).toBe(false)
121 expect(isAsyncFunction(() => {})).toBe(false)
122 expect(isAsyncFunction(function () {})).toBe(false)
123 expect(isAsyncFunction(function named () {})).toBe(false)
124 expect(isAsyncFunction(async () => {})).toBe(true)
125 expect(isAsyncFunction(async function () {})).toBe(true)
126 expect(isAsyncFunction(async function named () {})).toBe(true)
127 })
aba955e1 128})