Skip to content

Commit b3c1c6f

Browse files
BridgeARaddaleax
authored andcommitted
benchmark: fix and extend assert benchmarks
The benchmarks had the strict and non strict labels switched. This is fixed and the benchmarks were extended to check more possible input types and function calls. PR-URL: #14147 Refs: #13973 Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 268a1ff commit b3c1c6f

7 files changed

+328
-67
lines changed

benchmark/assert/deepequal-buffer.js

+29-6
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,62 @@
11
'use strict';
22
const common = require('../common.js');
33
const assert = require('assert');
4+
45
const bench = common.createBenchmark(main, {
5-
n: [1e3],
6-
len: [1e2],
7-
method: ['strict', 'nonstrict']
6+
n: [1e5],
7+
len: [1e2, 1e4],
8+
method: [
9+
'deepEqual',
10+
'deepStrictEqual',
11+
'notDeepEqual',
12+
'notDeepStrictEqual'
13+
]
814
});
915

1016
function main(conf) {
1117
const n = +conf.n;
1218
const len = +conf.len;
1319
var i;
1420

15-
const data = Buffer.allocUnsafe(len);
21+
const data = Buffer.allocUnsafe(len + 1);
1622
const actual = Buffer.alloc(len);
1723
const expected = Buffer.alloc(len);
24+
const expectedWrong = Buffer.alloc(len + 1);
1825
data.copy(actual);
1926
data.copy(expected);
27+
data.copy(expectedWrong);
2028

2129
switch (conf.method) {
22-
case 'strict':
30+
case 'deepEqual':
2331
bench.start();
2432
for (i = 0; i < n; ++i) {
2533
// eslint-disable-next-line no-restricted-properties
2634
assert.deepEqual(actual, expected);
2735
}
2836
bench.end(n);
2937
break;
30-
case 'nonstrict':
38+
case 'deepStrictEqual':
3139
bench.start();
3240
for (i = 0; i < n; ++i) {
3341
assert.deepStrictEqual(actual, expected);
3442
}
3543
bench.end(n);
3644
break;
45+
case 'notDeepEqual':
46+
bench.start();
47+
for (i = 0; i < n; ++i) {
48+
// eslint-disable-next-line no-restricted-properties
49+
assert.notDeepEqual(actual, expectedWrong);
50+
}
51+
bench.end(n);
52+
break;
53+
case 'notDeepStrictEqual':
54+
bench.start();
55+
for (i = 0; i < n; ++i) {
56+
assert.notDeepStrictEqual(actual, expectedWrong);
57+
}
58+
bench.end(n);
59+
break;
3760
default:
3861
throw new Error('Unsupported method');
3962
}

benchmark/assert/deepequal-object.js

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
'use strict';
2+
3+
const common = require('../common.js');
4+
const assert = require('assert');
5+
6+
const bench = common.createBenchmark(main, {
7+
n: [1e6],
8+
size: [1e2, 1e3, 1e4],
9+
method: [
10+
'deepEqual',
11+
'deepStrictEqual',
12+
'notDeepEqual',
13+
'notDeepStrictEqual'
14+
]
15+
});
16+
17+
function createObj(source, add = '') {
18+
return source.map((n) => ({
19+
foo: 'yarp',
20+
nope: {
21+
bar: `123${add}`,
22+
a: [1, 2, 3],
23+
baz: n
24+
}
25+
}));
26+
}
27+
28+
function main(conf) {
29+
const size = +conf.size;
30+
// TODO: Fix this "hack"
31+
const n = (+conf.n) / size;
32+
var i;
33+
34+
const source = Array.apply(null, Array(size));
35+
const actual = createObj(source);
36+
const expected = createObj(source);
37+
const expectedWrong = createObj(source, '4');
38+
39+
switch (conf.method) {
40+
case 'deepEqual':
41+
bench.start();
42+
for (i = 0; i < n; ++i) {
43+
// eslint-disable-next-line no-restricted-properties
44+
assert.deepEqual(actual, expected);
45+
}
46+
bench.end(n);
47+
break;
48+
case 'deepStrictEqual':
49+
bench.start();
50+
for (i = 0; i < n; ++i) {
51+
assert.deepStrictEqual(actual, expected);
52+
}
53+
bench.end(n);
54+
break;
55+
case 'notDeepEqual':
56+
bench.start();
57+
for (i = 0; i < n; ++i) {
58+
// eslint-disable-next-line no-restricted-properties
59+
assert.notDeepEqual(actual, expectedWrong);
60+
}
61+
bench.end(n);
62+
break;
63+
case 'notDeepStrictEqual':
64+
bench.start();
65+
for (i = 0; i < n; ++i) {
66+
assert.notDeepStrictEqual(actual, expectedWrong);
67+
}
68+
bench.end(n);
69+
break;
70+
default:
71+
throw new Error('Unsupported method');
72+
}
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
'use strict';
2+
3+
const common = require('../common.js');
4+
const assert = require('assert');
5+
6+
const primValues = {
7+
'null': null,
8+
'undefined': undefined,
9+
'string': 'a',
10+
'number': 1,
11+
'boolean': true,
12+
'object': { 0: 'a' },
13+
'array': [1, 2, 3],
14+
'new-array': new Array([1, 2, 3])
15+
};
16+
17+
const bench = common.createBenchmark(main, {
18+
prim: Object.keys(primValues),
19+
n: [25],
20+
len: [1e5],
21+
method: [
22+
'deepEqual_Array',
23+
'deepStrictEqual_Array',
24+
'notDeepEqual_Array',
25+
'notDeepStrictEqual_Array',
26+
'deepEqual_Set',
27+
'deepStrictEqual_Set',
28+
'notDeepEqual_Set',
29+
'notDeepStrictEqual_Set'
30+
]
31+
});
32+
33+
function main(conf) {
34+
const prim = primValues[conf.prim];
35+
const n = +conf.n;
36+
const len = +conf.len;
37+
const actual = [];
38+
const expected = [];
39+
const expectedWrong = [];
40+
var i;
41+
42+
for (var x = 0; x < len; x++) {
43+
actual.push(prim);
44+
expected.push(prim);
45+
expectedWrong.push(prim);
46+
}
47+
expectedWrong.pop();
48+
expectedWrong.push('b');
49+
50+
// Note: primitives are only added once to a set
51+
const actualSet = new Set(actual);
52+
const expectedSet = new Set(expected);
53+
const expectedWrongSet = new Set(expectedWrong);
54+
55+
switch (conf.method) {
56+
case 'deepEqual_Array':
57+
bench.start();
58+
for (i = 0; i < n; ++i) {
59+
// eslint-disable-next-line no-restricted-properties
60+
assert.deepEqual(actual, expected);
61+
}
62+
bench.end(n);
63+
break;
64+
case 'deepStrictEqual_Array':
65+
bench.start();
66+
for (i = 0; i < n; ++i) {
67+
assert.deepStrictEqual(actual, expected);
68+
}
69+
bench.end(n);
70+
break;
71+
case 'notDeepEqual_Array':
72+
bench.start();
73+
for (i = 0; i < n; ++i) {
74+
// eslint-disable-next-line no-restricted-properties
75+
assert.notDeepEqual(actual, expectedWrong);
76+
}
77+
bench.end(n);
78+
break;
79+
case 'notDeepStrictEqual_Array':
80+
bench.start();
81+
for (i = 0; i < n; ++i) {
82+
assert.notDeepStrictEqual(actual, expectedWrong);
83+
}
84+
bench.end(n);
85+
break;
86+
case 'deepEqual_Set':
87+
bench.start();
88+
for (i = 0; i < n; ++i) {
89+
// eslint-disable-next-line no-restricted-properties
90+
assert.deepEqual(actualSet, expectedSet);
91+
}
92+
bench.end(n);
93+
break;
94+
case 'deepStrictEqual_Set':
95+
bench.start();
96+
for (i = 0; i < n; ++i) {
97+
assert.deepStrictEqual(actualSet, expectedSet);
98+
}
99+
bench.end(n);
100+
break;
101+
case 'notDeepEqual_Set':
102+
bench.start();
103+
for (i = 0; i < n; ++i) {
104+
// eslint-disable-next-line no-restricted-properties
105+
assert.notDeepEqual(actualSet, expectedWrongSet);
106+
}
107+
bench.end(n);
108+
break;
109+
case 'notDeepStrictEqual_Set':
110+
bench.start();
111+
for (i = 0; i < n; ++i) {
112+
assert.notDeepStrictEqual(actualSet, expectedWrongSet);
113+
}
114+
bench.end(n);
115+
break;
116+
default:
117+
throw new Error('Unsupported method');
118+
}
119+
}

benchmark/assert/deepequal-prims-and-objs-big-array.js

-55
This file was deleted.

benchmark/assert/deepequal-prims-and-objs-big-loop.js

+24-3
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,54 @@ const primValues = {
1616
const bench = common.createBenchmark(main, {
1717
prim: Object.keys(primValues),
1818
n: [1e6],
19-
method: ['strict', 'nonstrict']
19+
method: [
20+
'deepEqual',
21+
'deepStrictEqual',
22+
'notDeepEqual',
23+
'notDeepStrictEqual'
24+
]
2025
});
2126

2227
function main(conf) {
2328
const prim = primValues[conf.prim];
2429
const n = +conf.n;
2530
const actual = prim;
2631
const expected = prim;
32+
const expectedWrong = 'b';
2733
var i;
2834

2935
// Creates new array to avoid loop invariant code motion
3036
switch (conf.method) {
31-
case 'strict':
37+
case 'deepEqual':
3238
bench.start();
3339
for (i = 0; i < n; ++i) {
3440
// eslint-disable-next-line no-restricted-properties
3541
assert.deepEqual([actual], [expected]);
3642
}
3743
bench.end(n);
3844
break;
39-
case 'nonstrict':
45+
case 'deepStrictEqual':
4046
bench.start();
4147
for (i = 0; i < n; ++i) {
4248
assert.deepStrictEqual([actual], [expected]);
4349
}
4450
bench.end(n);
4551
break;
52+
case 'notDeepEqual':
53+
bench.start();
54+
for (i = 0; i < n; ++i) {
55+
// eslint-disable-next-line no-restricted-properties
56+
assert.notDeepEqual([actual], [expectedWrong]);
57+
}
58+
bench.end(n);
59+
break;
60+
case 'notDeepStrictEqual':
61+
bench.start();
62+
for (i = 0; i < n; ++i) {
63+
assert.notDeepStrictEqual([actual], [expectedWrong]);
64+
}
65+
bench.end(n);
66+
break;
4667
default:
4768
throw new Error('Unsupported method');
4869
}

0 commit comments

Comments
 (0)