'use strict'; const common = require('../common.js'); const assert = require('assert'); const bench = common.createBenchmark(main, { n: [5e3], size: [1e2, 1e3, 5e4], strict: [0, 1], method: [ 'deepEqual', 'notDeepEqual' ], }); function createObj(source, add = '') { return source.map((n) => ({ foo: 'yarp', nope: { bar: `123${add}`, a: [1, 2, 3], baz: n, c: {}, b: [], }, })); } function main({ size, n, method, strict }) { // TODO: Fix this "hack". `n` should not be manipulated. n = Math.min(Math.ceil(n / size), 20); if (!method) method = 'deepEqual'; const source = Array.apply(null, Array(size)); const actual = createObj(source); const expected = createObj(source); const expectedWrong = createObj(source, '4'); if (strict) { method = method.replace('eep', 'eepStrict'); } const fn = assert[method]; const value2 = method.includes('not') ? expectedWrong : expected; bench.start(); for (let i = 0; i < n; ++i) { fn(actual, value2); } bench.end(n); }