Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 274x 162x 162x 162x 256x 133x 29x 198x 324x 182x 182x 2x 180x 18x 162x 162x | function areNumbersEqualWithTolerance(
num1: number,
num2: number,
tolerance: number
): boolean {
return Math.abs(num1 - num2) <= tolerance;
}
function areArraysEqual(
arr1: ArrayLike<number>,
arr2: ArrayLike<number>,
tolerance = 1e-5
): boolean {
Iif (arr1.length !== arr2.length) {
return false;
}
for (let i = 0; i < arr1.length; i++) {
if (!areNumbersEqualWithTolerance(arr1[i], arr2[i], tolerance)) {
return false;
}
}
return true;
}
function isNumberType(value: any): value is number {
return typeof value === 'number';
}
function isNumberArrayLike(value: any): value is ArrayLike<number> {
return 'length' in value && typeof value[0] === 'number';
}
/**
* Returns whether two values are equal or not, based on epsilon comparison.
* For array comparison, it does NOT strictly compare them but only compare its values.
* It can compare array of numbers and also typed array. Otherwise it will just return false.
*
* @param v1 - The first value to compare
* @param v2 - The second value to compare
* @param tolerance - The acceptable tolerance, the default is 0.00001
*
* @returns True if the two values are within the tolerance levels.
*/
export default function isEqual<ValueType>(
v1: ValueType,
v2: ValueType,
tolerance = 1e-5
): boolean {
// values must be the same type or not null
if (typeof v1 !== typeof v2 || v1 === null || v2 === null) {
return false;
}
if (isNumberType(v1) && isNumberType(v2)) {
return areNumbersEqualWithTolerance(v1, v2, tolerance);
}
Eif (isNumberArrayLike(v1) && isNumberArrayLike(v2)) {
return areArraysEqual(v1, v2, tolerance);
}
return false;
}
|