Skip to content

Commit 9b104b4

Browse files
BridgeARFishrock123
authored andcommitted
benchmark: add assert map and set benchmarks
PR-URL: #14258 Reviewed-By: Refael Ackermann <[email protected]>
1 parent c866c90 commit 9b104b4

File tree

2 files changed

+255
-0
lines changed

2 files changed

+255
-0
lines changed

benchmark/assert/deepequal-map.js

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
'use strict';
2+
3+
/* eslint-disable no-restricted-properties */
4+
5+
const common = require('../common.js');
6+
const assert = require('assert');
7+
8+
const bench = common.createBenchmark(main, {
9+
n: [5e2],
10+
len: [5e2],
11+
method: [
12+
'deepEqual_primitiveOnly',
13+
'deepStrictEqual_primitiveOnly',
14+
'deepEqual_objectOnly',
15+
'deepStrictEqual_objectOnly',
16+
'deepEqual_mixed',
17+
'deepStrictEqual_mixed',
18+
'deepEqual_looseMatches',
19+
'notDeepEqual_primitiveOnly',
20+
'notDeepStrictEqual_primitiveOnly',
21+
'notDeepEqual_objectOnly',
22+
'notDeepStrictEqual_objectOnly',
23+
'notDeepEqual_mixed',
24+
'notDeepStrictEqual_mixed',
25+
'notDeepEqual_looseMatches',
26+
]
27+
});
28+
29+
function benchmark(method, n, values, values2) {
30+
const actual = new Map(values);
31+
// Prevent reference equal elements
32+
const deepCopy = JSON.parse(JSON.stringify(values2 ? values2 : values));
33+
const expected = new Map(deepCopy);
34+
bench.start();
35+
for (var i = 0; i < n; ++i) {
36+
method(actual, expected);
37+
}
38+
bench.end(n);
39+
}
40+
41+
function main(conf) {
42+
const n = +conf.n;
43+
const len = +conf.len;
44+
45+
const array = Array(len).fill(1);
46+
var values, values2;
47+
48+
switch (conf.method) {
49+
case 'deepEqual_primitiveOnly':
50+
values = array.map((_, i) => [`str_${i}`, 123]);
51+
benchmark(assert.deepEqual, n, values);
52+
break;
53+
case 'deepStrictEqual_primitiveOnly':
54+
values = array.map((_, i) => [`str_${i}`, 123]);
55+
benchmark(assert.deepStrictEqual, n, values);
56+
break;
57+
case 'deepEqual_objectOnly':
58+
values = array.map((_, i) => [[`str_${i}`, 1], 123]);
59+
benchmark(assert.deepEqual, n, values);
60+
break;
61+
case 'deepStrictEqual_objectOnly':
62+
values = array.map((_, i) => [[`str_${i}`, 1], 123]);
63+
benchmark(assert.deepStrictEqual, n, values);
64+
break;
65+
case 'deepEqual_mixed':
66+
values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]);
67+
benchmark(assert.deepEqual, n, values);
68+
break;
69+
case 'deepStrictEqual_mixed':
70+
values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]);
71+
benchmark(assert.deepStrictEqual, n, values);
72+
break;
73+
case 'deepEqual_looseMatches':
74+
values = array.map((_, i) => [i, i]);
75+
values2 = values.slice().map((v) => [String(v[0]), String(v[1])]);
76+
benchmark(assert.deepEqual, n, values, values2);
77+
break;
78+
case 'notDeepEqual_primitiveOnly':
79+
values = array.map((_, i) => [`str_${i}`, 123]);
80+
values2 = values.slice(0);
81+
values2[Math.floor(len / 2)] = ['w00t', 123];
82+
benchmark(assert.notDeepEqual, n, values, values2);
83+
break;
84+
case 'notDeepStrictEqual_primitiveOnly':
85+
values = array.map((_, i) => [`str_${i}`, 123]);
86+
values2 = values.slice(0);
87+
values2[Math.floor(len / 2)] = ['w00t', 123];
88+
benchmark(assert.notDeepStrictEqual, n, values, values2);
89+
break;
90+
case 'notDeepEqual_objectOnly':
91+
values = array.map((_, i) => [[`str_${i}`, 1], 123]);
92+
values2 = values.slice(0);
93+
values2[Math.floor(len / 2)] = [['w00t'], 123];
94+
benchmark(assert.notDeepEqual, n, values, values2);
95+
break;
96+
case 'notDeepStrictEqual_objectOnly':
97+
values = array.map((_, i) => [[`str_${i}`, 1], 123]);
98+
values2 = values.slice(0);
99+
values2[Math.floor(len / 2)] = [['w00t'], 123];
100+
benchmark(assert.notDeepStrictEqual, n, values, values2);
101+
break;
102+
case 'notDeepEqual_mixed':
103+
values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]);
104+
values2 = values.slice(0);
105+
values2[0] = ['w00t', 123];
106+
benchmark(assert.notDeepEqual, n, values, values2);
107+
break;
108+
case 'notDeepStrictEqual_mixed':
109+
values = array.map((_, i) => [i % 2 ? [`str_${i}`, 1] : `str_${i}`, 123]);
110+
values2 = values.slice(0);
111+
values2[0] = ['w00t', 123];
112+
benchmark(assert.notDeepStrictEqual, n, values, values2);
113+
break;
114+
case 'notDeepEqual_looseMatches':
115+
values = array.map((_, i) => [i, i]);
116+
values2 = values.slice().map((v) => [String(v[0]), String(v[1])]);
117+
values2[len - 1] = [String(len + 1), String(len + 1)];
118+
benchmark(assert.notDeepEqual, n, values, values2);
119+
break;
120+
default:
121+
throw new Error('Unsupported method');
122+
}
123+
}

benchmark/assert/deepequal-set.js

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
'use strict';
2+
3+
/* eslint-disable no-restricted-properties */
4+
5+
const common = require('../common.js');
6+
const assert = require('assert');
7+
8+
const bench = common.createBenchmark(main, {
9+
n: [5e2],
10+
len: [5e2],
11+
method: [
12+
'deepEqual_primitiveOnly',
13+
'deepStrictEqual_primitiveOnly',
14+
'deepEqual_objectOnly',
15+
'deepStrictEqual_objectOnly',
16+
'deepEqual_mixed',
17+
'deepStrictEqual_mixed',
18+
'deepEqual_looseMatches',
19+
'notDeepEqual_primitiveOnly',
20+
'notDeepStrictEqual_primitiveOnly',
21+
'notDeepEqual_objectOnly',
22+
'notDeepStrictEqual_objectOnly',
23+
'notDeepEqual_mixed',
24+
'notDeepStrictEqual_mixed',
25+
'notDeepEqual_looseMatches',
26+
]
27+
});
28+
29+
function benchmark(method, n, values, values2) {
30+
const actual = new Set(values);
31+
// Prevent reference equal elements
32+
const deepCopy = JSON.parse(JSON.stringify(values2 ? values2 : values));
33+
const expected = new Set(deepCopy);
34+
bench.start();
35+
for (var i = 0; i < n; ++i) {
36+
method(actual, expected);
37+
}
38+
bench.end(n);
39+
}
40+
41+
function main(conf) {
42+
const n = +conf.n;
43+
const len = +conf.len;
44+
45+
const array = Array(len).fill(1);
46+
47+
var values, values2;
48+
49+
switch (conf.method) {
50+
case 'deepEqual_primitiveOnly':
51+
values = array.map((_, i) => `str_${i}`);
52+
benchmark(assert.deepEqual, n, values);
53+
break;
54+
case 'deepStrictEqual_primitiveOnly':
55+
values = array.map((_, i) => `str_${i}`);
56+
benchmark(assert.deepStrictEqual, n, values);
57+
break;
58+
case 'deepEqual_objectOnly':
59+
values = array.map((_, i) => [`str_${i}`, null]);
60+
benchmark(assert.deepEqual, n, values);
61+
break;
62+
case 'deepStrictEqual_objectOnly':
63+
values = array.map((_, i) => [`str_${i}`, null]);
64+
benchmark(assert.deepStrictEqual, n, values);
65+
break;
66+
case 'deepEqual_mixed':
67+
values = array.map((_, i) => {
68+
return i % 2 ? [`str_${i}`, null] : `str_${i}`;
69+
});
70+
benchmark(assert.deepEqual, n, values);
71+
break;
72+
case 'deepStrictEqual_mixed':
73+
values = array.map((_, i) => {
74+
return i % 2 ? [`str_${i}`, null] : `str_${i}`;
75+
});
76+
benchmark(assert.deepStrictEqual, n, values);
77+
break;
78+
case 'deepEqual_looseMatches':
79+
values = array.map((_, i) => i);
80+
values2 = values.slice().map((v) => String(v));
81+
benchmark(assert.deepEqual, n, values, values2);
82+
break;
83+
case 'notDeepEqual_primitiveOnly':
84+
values = array.map((_, i) => `str_${i}`);
85+
values2 = values.slice(0);
86+
values2[Math.floor(len / 2)] = 'w00t';
87+
benchmark(assert.notDeepEqual, n, values, values2);
88+
break;
89+
case 'notDeepStrictEqual_primitiveOnly':
90+
values = array.map((_, i) => `str_${i}`);
91+
values2 = values.slice(0);
92+
values2[Math.floor(len / 2)] = 'w00t';
93+
benchmark(assert.notDeepStrictEqual, n, values, values2);
94+
break;
95+
case 'notDeepEqual_objectOnly':
96+
values = array.map((_, i) => [`str_${i}`, null]);
97+
values2 = values.slice(0);
98+
values2[Math.floor(len / 2)] = ['w00t'];
99+
benchmark(assert.notDeepEqual, n, values, values2);
100+
break;
101+
case 'notDeepStrictEqual_objectOnly':
102+
values = array.map((_, i) => [`str_${i}`, null]);
103+
values2 = values.slice(0);
104+
values2[Math.floor(len / 2)] = ['w00t'];
105+
benchmark(assert.notDeepStrictEqual, n, values, values2);
106+
break;
107+
case 'notDeepEqual_mixed':
108+
values = array.map((_, i) => {
109+
return i % 2 ? [`str_${i}`, null] : `str_${i}`;
110+
});
111+
values2 = values.slice();
112+
values2[0] = 'w00t';
113+
benchmark(assert.notDeepEqual, n, values, values2);
114+
break;
115+
case 'notDeepStrictEqual_mixed':
116+
values = array.map((_, i) => {
117+
return i % 2 ? [`str_${i}`, null] : `str_${i}`;
118+
});
119+
values2 = values.slice();
120+
values2[0] = 'w00t';
121+
benchmark(assert.notDeepStrictEqual, n, values, values2);
122+
break;
123+
case 'notDeepEqual_looseMatches':
124+
values = array.map((_, i) => i);
125+
values2 = values.slice().map((v) => String(v));
126+
values2[len - 1] = String(len + 1);
127+
benchmark(assert.notDeepEqual, n, values, values2);
128+
break;
129+
default:
130+
throw new Error('Unsupported method');
131+
}
132+
}

0 commit comments

Comments
 (0)