'use strict'; var nearlyEqual = require('../../utils/number').nearlyEqual; var bigNearlyEqual = require('../../utils/bignumber/nearlyEqual'); function factory (type, config, load, typed) { /** * Test whether two values are equal. * * @param {number | BigNumber | Fraction | boolean | Complex | Unit} x First value to compare * @param {number | BigNumber | Fraction | boolean | Complex} y Second value to compare * @return {boolean} Returns true when the compared values are equal, else returns false * @private */ var equalScalar = typed('equalScalar', { 'boolean, boolean': function (x, y) { return x === y; }, 'number, number': function (x, y) { return x === y || nearlyEqual(x, y, config.epsilon); }, 'BigNumber, BigNumber': function (x, y) { return x.eq(y) || bigNearlyEqual(x, y, config.epsilon); }, 'Fraction, Fraction': function (x, y) { return x.equals(y); }, 'Complex, Complex': function (x, y) { return x.equals(y); }, 'Unit, Unit': function (x, y) { if (!x.equalBase(y)) { throw new Error('Cannot compare units with different base'); } return equalScalar(x.value, y.value); }, 'string, string': function (x, y) { return x === y; } }); return equalScalar; } exports.factory = factory;