2015-12-17 10:05:45 -03:00
|
|
|
'use strict';
|
2017-02-01 07:28:59 +08:00
|
|
|
const common = require('../common.js');
|
|
|
|
const assert = require('assert');
|
2016-02-08 21:50:10 +01:00
|
|
|
|
2023-02-09 22:07:11 +01:00
|
|
|
const circular = {};
|
|
|
|
circular.circular = circular;
|
|
|
|
const circular2 = {};
|
|
|
|
circular2.circular = circular2;
|
|
|
|
const notCircular = {};
|
|
|
|
notCircular.circular = {};
|
|
|
|
|
2016-02-08 21:50:10 +01:00
|
|
|
const primValues = {
|
2025-04-19 13:10:40 +02:00
|
|
|
'null_prototype': { __proto__: null },
|
2023-02-09 22:07:11 +01:00
|
|
|
'string': 'abcdef',
|
|
|
|
'number': 1_000,
|
|
|
|
'boolean': true,
|
|
|
|
'object': { property: 'abcdef' },
|
|
|
|
'array': [1, 2, 3],
|
|
|
|
'set_object': new Set([[1]]),
|
|
|
|
'set_simple': new Set([1, 2, 3]),
|
|
|
|
'circular': circular,
|
|
|
|
'empty_object': {},
|
|
|
|
'regexp': /abc/i,
|
|
|
|
'date': new Date(),
|
|
|
|
};
|
|
|
|
|
|
|
|
const primValues2 = {
|
2025-04-19 13:10:40 +02:00
|
|
|
'null_prototype': { __proto__: null },
|
2023-02-09 22:07:11 +01:00
|
|
|
'object': { property: 'abcdef' },
|
2019-01-31 21:05:17 -08:00
|
|
|
'array': [1, 2, 3],
|
2023-02-09 22:07:11 +01:00
|
|
|
'set_object': new Set([[1]]),
|
|
|
|
'set_simple': new Set([1, 3, 2]),
|
|
|
|
'circular': circular2,
|
|
|
|
'empty_object': {},
|
|
|
|
'regexp': /abc/i,
|
|
|
|
'date': new Date(primValues.date),
|
|
|
|
};
|
|
|
|
|
|
|
|
const primValuesUnequal = {
|
2025-04-19 13:10:40 +02:00
|
|
|
'null_prototype': { __proto__: { __proto__: null } },
|
2023-02-09 22:07:11 +01:00
|
|
|
'string': 'abcdez',
|
|
|
|
'number': 1_001,
|
|
|
|
'boolean': false,
|
|
|
|
'object': { property2: 'abcdef' },
|
|
|
|
'array': [1, 3, 2],
|
|
|
|
'set_object': new Set([[2]]),
|
|
|
|
'set_simple': new Set([1, 4, 2]),
|
|
|
|
'circular': notCircular,
|
|
|
|
'empty_object': [],
|
|
|
|
'regexp': /abc/g,
|
|
|
|
'date': new Date(primValues.date.getTime() + 1),
|
2016-02-08 21:50:10 +01:00
|
|
|
};
|
|
|
|
|
2017-02-01 07:28:59 +08:00
|
|
|
const bench = common.createBenchmark(main, {
|
2017-12-30 03:54:30 +01:00
|
|
|
primitive: Object.keys(primValues),
|
2023-02-09 22:07:11 +01:00
|
|
|
n: [1e5],
|
2018-08-03 15:30:22 +02:00
|
|
|
strict: [0, 1],
|
2020-02-12 21:02:35 +01:00
|
|
|
method: ['deepEqual', 'notDeepEqual'],
|
2023-02-09 22:07:11 +01:00
|
|
|
}, {
|
|
|
|
combinationFilter: (p) => {
|
|
|
|
return p.strict === 1 || p.method === 'deepEqual';
|
|
|
|
},
|
2015-12-17 10:05:45 -03:00
|
|
|
});
|
|
|
|
|
2018-08-03 15:30:22 +02:00
|
|
|
function main({ n, primitive, method, strict }) {
|
2017-12-30 03:54:30 +01:00
|
|
|
const prim = primValues[primitive];
|
2023-02-09 22:07:11 +01:00
|
|
|
const actual = primValues2[primitive] ?? prim;
|
|
|
|
const expected = method.includes('not') ? primValuesUnequal[primitive] : prim;
|
2015-12-17 10:05:45 -03:00
|
|
|
|
2018-08-03 15:30:22 +02:00
|
|
|
if (strict) {
|
|
|
|
method = method.replace('eep', 'eepStrict');
|
|
|
|
}
|
2018-05-30 03:47:41 +00:00
|
|
|
const fn = assert[method];
|
2018-01-23 13:17:21 +01:00
|
|
|
|
|
|
|
bench.start();
|
2019-11-12 19:56:03 +01:00
|
|
|
for (let i = 0; i < n; ++i) {
|
2023-02-09 22:07:11 +01:00
|
|
|
fn(actual, expected);
|
2015-12-17 10:05:45 -03:00
|
|
|
}
|
2018-01-23 13:17:21 +01:00
|
|
|
bench.end(n);
|
2015-12-17 10:05:45 -03:00
|
|
|
}
|