Skip to content

Instantly share code, notes, and snippets.

@parodot
Last active November 17, 2017 11:23
Show Gist options
  • Save parodot/6bd1beb76c855e0244feab7ba1b4fa66 to your computer and use it in GitHub Desktop.
Save parodot/6bd1beb76c855e0244feab7ba1b4fa66 to your computer and use it in GitHub Desktop.
const fe = require('fast-deep-equal');
const ne = require('nano-equal');
const de = require('deep-equal');
const assert = require('assert');
let oa = { 'a': 1, 'b': [1, { 'c': 'd' }], e: { 'a': [1, 2, '2'] } };
let ob = { 'a': 1, 'b': [1, { 'c': 'd' }], e: { 'a': [1, 2, '2'] } };
const eq = 'equal';
const neq = 'not equal';
function adeq(a, b) {
try {
assert.deepEqual(a, b);
return true;
} catch (e) {
return false;
}
}
function adseq(a, b) {
try {
assert.deepStrictEqual(a, b);
return true;
} catch (e) {
return false;
}
}
const j = JSON.stringify;
const p = JSON.parse;
function testAll(a, b, testid) {
console.log(testid);
// console.log(`osrc ${j(oa)}`);
// console.log(`odest ${j(ob)}`);
console.log(`src ${j(a)}`);
console.log(`dest ${j(b)}`);
console.log(`assert.deepEqual : ${adeq(a, b) ? eq : neq}`);
console.log(`assert.deepStrictEqual : ${adseq(a, b) ? eq : neq}`);
console.log(`deep-equal : ${de(a, b) ? eq : neq}`);
console.log(`nano-equal : ${ne(a, b) ? eq : neq}`);
console.log(`fast-equal : ${fe(a, b) ? eq : neq}`);
}
let ta = {}, tb = {};
ta = p(j(oa))
tb = p(j(ob))
testAll(ta, tb, 'Before Change');
delete ta; delete tb;
ta = {}, tb = {};
console.log('Change tb.b.d = 1; // this is valid js, though b is an array');
ta = p(j(oa))
tb = p(j(ob))
tb.b.d = 1;
testAll(ta, tb, 'After Change');
delete ta; delete tb;
ta = {}, tb = {};
console.log('Change tb.b[1].d = 1;');
ta = p(j(oa))
tb = p(j(ob))
tb.b[1].c = 1;
testAll(ta, tb, 'After Change');
delete ta; delete tb;
ta = {}, tb = {};
console.log('Change tb.b[1].d = 1;');
ta = p(j(oa))
tb = p(j(ob))
tb.b[1].d = 1;
testAll(ta, tb, 'After Change');
delete ta; delete tb;
ta = {}, tb = {};
console.log('Change tb.b[1].d = 1;');
ta = p(j(oa))
tb = p(j(ob))
tb.b[1].d = 1;
testAll(ta, tb, 'After Change');
delete ta; delete tb;
ta = {}, tb = {};
console.log('Change tb.b[1].d = 1;');
ta = p(j(oa))
tb = p(j(ob))
tb.b[1].d = 11;
testAll(ta, tb, 'After Change');
delete ta; delete tb;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment