'use strict'; const assertDeepStrictEqual = require('assert').deepStrictEqual; const tests = require('../spec/tests'); const Benchmark = require('benchmark'); const suite = new Benchmark.Suite; const equalPackages = { 'fast-deep-equal': require('../index'), 'nano-equal': true, 'shallow-equal-fuzzy': true, 'underscore.isEqual': require('underscore').isEqual, 'lodash.isEqual': require('lodash').isEqual, 'deep-equal': true, 'deep-eql': true, 'assert.deepStrictEqual': (a, b) => { try { assertDeepStrictEqual(a, b); return true; } catch(e) { return false; } } }; for (const equalName in equalPackages) { let equalFunc = equalPackages[equalName]; if (equalFunc === true) equalFunc = require(equalName); for (const testSuite of tests) { for (const test of testSuite.tests) { try { if (equalFunc(test.value1, test.value2) !== test.equal) console.error('different result', equalName, testSuite.description, test.description); } catch(e) { console.error(equalName, testSuite.description, test.description, e); } } } suite.add(equalName, function() { for (const testSuite of tests) { for (const test of testSuite.tests) { if (test.description != 'pseudo array and equivalent array are not equal') equalFunc(test.value1, test.value2); } } }); } console.log(); suite .on('cycle', (event) => console.log(String(event.target))) .on('complete', function () { console.log('The fastest is ' + this.filter('fastest').map('name')); }) .run({async: true});