1'use strict'; 2 3const common = require('../common.js'); 4const { deepEqual, deepStrictEqual, notDeepEqual, notDeepStrictEqual } = 5 require('assert'); 6 7const primValues = { 8 'string': 'a', 9 'number': 1, 10 'object': { 0: 'a' }, 11 'array': [1, 2, 3], 12}; 13 14const bench = common.createBenchmark(main, { 15 primitive: Object.keys(primValues), 16 n: [25], 17 len: [2e4], 18 strict: [0, 1], 19 method: [ 20 'deepEqual_Array', 21 'notDeepEqual_Array', 22 'deepEqual_Set', 23 'notDeepEqual_Set', 24 ], 25}); 26 27function run(fn, n, actual, expected) { 28 bench.start(); 29 for (let i = 0; i < n; ++i) { 30 fn(actual, expected); 31 } 32 bench.end(n); 33} 34 35function main({ n, len, primitive, method, strict }) { 36 const prim = primValues[primitive]; 37 const actual = []; 38 const expected = []; 39 const expectedWrong = []; 40 41 for (let x = 0; x < len; x++) { 42 actual.push(prim); 43 expected.push(prim); 44 expectedWrong.push(prim); 45 } 46 expectedWrong.pop(); 47 expectedWrong.push('b'); 48 49 // Note: primitives are only added once to a set 50 const actualSet = new Set(actual); 51 const expectedSet = new Set(expected); 52 const expectedWrongSet = new Set(expectedWrong); 53 54 switch (method) { 55 case 'deepEqual_Array': 56 run(strict ? deepStrictEqual : deepEqual, n, actual, expected); 57 break; 58 case 'notDeepEqual_Array': 59 run(strict ? notDeepStrictEqual : notDeepEqual, n, actual, expectedWrong); 60 break; 61 case 'deepEqual_Set': 62 run(strict ? deepStrictEqual : deepEqual, n, actualSet, expectedSet); 63 break; 64 case 'notDeepEqual_Set': 65 run(strict ? notDeepStrictEqual : notDeepEqual, 66 n, actualSet, expectedWrongSet); 67 break; 68 default: 69 throw new Error(`Unsupported method "${method}"`); 70 } 71} 72