Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9b104b4

Browse filesBrowse files
BridgeARFishrock123
authored andcommitted
benchmark: add assert map and set benchmarks
PR-URL: #14258 Reviewed-By: Refael Ackermann <refack@gmail.com>
1 parent c866c90 commit 9b104b4
Copy full SHA for 9b104b4

File tree

Expand file treeCollapse file tree

2 files changed

+255
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+255
-0
lines changed
Open diff view settings
Collapse file

‎benchmark/assert/deepequal-map.js‎

Copy file name to clipboard
+123Lines changed: 123 additions & 0 deletions
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+
}
Collapse file

‎benchmark/assert/deepequal-set.js‎

Copy file name to clipboard
+132Lines changed: 132 additions & 0 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.