import {configDependency} from '../core/Config.js' import {Signature, ImpType, Dependency} from '../core/Dispatcher.js' const DBL_EPSILON = Number.EPSILON || 2.2204460492503130808472633361816E-16 declare module "./type" { interface NumbersReturn { equal: Signature unequal: Signature } } export const equal = (dep: configDependency): ImpType<'equal', [number, number]> => (x, y) => { const eps = dep.config.epsilon if (eps === null || eps === undefined) return x === y if (x === y) return true if (isNaN(x) || isNaN(y)) return false if (isFinite(x) && isFinite(y)) { const diff = Math.abs(x - y) if (diff < DBL_EPSILON) return true return diff <= Math.max(Math.abs(x), Math.abs(y)) * eps } return false } export const unequal = (dep: Dependency<'equal', [number, number]>): ImpType<'unequal', [number, number]> => (x, y) => { return !dep.equal(x, y) }