UNPKG

mathjs

Version:

Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with dif

78 lines (72 loc) 1.97 kB
import { factory } from '../../utils/factory' const name = 'deepEqual' const dependencies = [ 'typed', 'equal' ] export const createDeepEqual = /* #__PURE__ */ factory(name, dependencies, ({ typed, equal }) => { /** * Test element wise whether two matrices are equal. * The function accepts both matrices and scalar values. * * Strings are compared by their numerical value. * * Syntax: * * math.deepEqual(x, y) * * Examples: * * math.deepEqual(2, 4) // returns false * * a = [2, 5, 1] * b = [2, 7, 1] * * math.deepEqual(a, b) // returns false * math.equal(a, b) // returns [true, false, true] * * See also: * * equal, unequal * * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x First matrix to compare * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y Second matrix to compare * @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} * Returns true when the input matrices have the same size and each of their elements is equal. */ return typed(name, { 'any, any': function (x, y) { return _deepEqual(x.valueOf(), y.valueOf()) } }) /** * Test whether two arrays have the same size and all elements are equal * @param {Array | *} x * @param {Array | *} y * @return {boolean} Returns true if both arrays are deep equal */ function _deepEqual (x, y) { if (Array.isArray(x)) { if (Array.isArray(y)) { const len = x.length if (len !== y.length) { return false } for (let i = 0; i < len; i++) { if (!_deepEqual(x[i], y[i])) { return false } } return true } else { return false } } else { if (Array.isArray(y)) { return false } else { return equal(x, y) } } } })