119 lines
3.3 KiB
TypeScript
119 lines
3.3 KiB
TypeScript
import assert from 'node:assert';
|
|
import { isDeepEqualData } from './is-deep-equal-data';
|
|
|
|
it('should check if two primitives are equal', async () => {
|
|
let x = 1;
|
|
let y = 1;
|
|
let result = isDeepEqualData(x, y);
|
|
assert.equal(result, true);
|
|
|
|
x = 1;
|
|
y = 2;
|
|
result = isDeepEqualData(x, y);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should return false for different types', async () => {
|
|
const obj = { a: 1 };
|
|
const num = 1;
|
|
const result = isDeepEqualData(obj, num);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should return false for null values compared with objects', async () => {
|
|
const obj = { a: 1 };
|
|
const result = isDeepEqualData(obj, null);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should identify two equal objects', async () => {
|
|
const obj1 = { a: 1, b: 2 };
|
|
const obj2 = { a: 1, b: 2 };
|
|
const result = isDeepEqualData(obj1, obj2);
|
|
assert.equal(result, true);
|
|
});
|
|
|
|
it('should identify two objects with different values', async () => {
|
|
const obj1 = { a: 1, b: 2 };
|
|
const obj2 = { a: 1, b: 3 };
|
|
const result = isDeepEqualData(obj1, obj2);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should identify two objects with different number of keys', async () => {
|
|
const obj1 = { a: 1, b: 2 };
|
|
const obj2 = { a: 1, b: 2, c: 3 };
|
|
const result = isDeepEqualData(obj1, obj2);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should handle nested objects', async () => {
|
|
const obj1 = { a: { c: 1 }, b: 2 };
|
|
const obj2 = { a: { c: 1 }, b: 2 };
|
|
const result = isDeepEqualData(obj1, obj2);
|
|
assert.equal(result, true);
|
|
});
|
|
|
|
it('should detect inequality in nested objects', async () => {
|
|
const obj1 = { a: { c: 1 }, b: 2 };
|
|
const obj2 = { a: { c: 2 }, b: 2 };
|
|
const result = isDeepEqualData(obj1, obj2);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should compare arrays correctly', async () => {
|
|
const arr1 = [1, 2, 3];
|
|
const arr2 = [1, 2, 3];
|
|
const result = isDeepEqualData(arr1, arr2);
|
|
assert.equal(result, true);
|
|
|
|
const arr3 = [1, 2, 3];
|
|
const arr4 = [1, 2, 4];
|
|
const result2 = isDeepEqualData(arr3, arr4);
|
|
assert.equal(result2, false);
|
|
});
|
|
|
|
it('should return false for null comparison with object', () => {
|
|
const obj = { a: 1 };
|
|
const result = isDeepEqualData(obj, null);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should distinguish between array and object with same enumerable properties', () => {
|
|
const obj = { 0: 'one', 1: 'two', length: 2 };
|
|
const arr = ['one', 'two'];
|
|
const result = isDeepEqualData(obj, arr);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should return false when comparing objects with different prototypes', () => {
|
|
const obj1 = Object.create({ a: 1 });
|
|
const obj2 = Object.create(null);
|
|
obj1.b = 2;
|
|
obj2.b = 2;
|
|
const result = isDeepEqualData(obj1, obj2);
|
|
assert.equal(result, false);
|
|
});
|
|
|
|
it('should handle date object comparisons correctly', () => {
|
|
const date1 = new Date(2000, 0, 1);
|
|
const date2 = new Date(2000, 0, 1);
|
|
const date3 = new Date(2000, 0, 2);
|
|
assert.equal(isDeepEqualData(date1, date2), true);
|
|
assert.equal(isDeepEqualData(date1, date3), false);
|
|
});
|
|
|
|
it('should handle function comparisons', () => {
|
|
const func1 = () => {
|
|
console.log('hello');
|
|
};
|
|
const func2 = () => {
|
|
console.log('hello');
|
|
};
|
|
const func3 = () => {
|
|
console.log('world');
|
|
};
|
|
assert.equal(isDeepEqualData(func1, func2), false);
|
|
assert.equal(isDeepEqualData(func1, func3), false);
|
|
});
|