diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-12-02 13:12:52 +0100 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2019-12-07 00:43:51 +0100 |
commit | 5360dd151da9d8b1c97785a0e394cc731af31f69 (patch) | |
tree | f8bee2cd4810c7ee9e168fdfcb84397dca37c5ad /lib | |
parent | b5f2942fb55055b5a8b5de290953f81d2e291005 (diff) | |
download | android-node-v8-5360dd151da9d8b1c97785a0e394cc731af31f69.tar.gz android-node-v8-5360dd151da9d8b1c97785a0e394cc731af31f69.tar.bz2 android-node-v8-5360dd151da9d8b1c97785a0e394cc731af31f69.zip |
assert: handle (deep) equal(NaN, NaN) as being identical
This aligns the `equal` and `deepEqual()` implementations with the
strict versions by accepting `NaN` as being identical in case both
sides are NaN.
Refs: https://github.com/nodejs/node/issues/30350#issuecomment-552191641
PR-URL: https://github.com/nodejs/node/pull/30766
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/assert.js | 5 | ||||
-rw-r--r-- | lib/internal/util/comparisons.js | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/lib/assert.js b/lib/assert.js index c3faba0905..828a443ec9 100644 --- a/lib/assert.js +++ b/lib/assert.js @@ -25,6 +25,7 @@ const { ObjectIs, ObjectKeys, ObjectPrototypeIsPrototypeOf, + NumberIsNaN } = primordials; const { Buffer } = require('buffer'); @@ -398,7 +399,7 @@ assert.equal = function equal(actual, expected, message) { throw new ERR_MISSING_ARGS('actual', 'expected'); } // eslint-disable-next-line eqeqeq - if (actual != expected) { + if (actual != expected && (!NumberIsNaN(actual) || !NumberIsNaN(expected))) { innerFail({ actual, expected, @@ -416,7 +417,7 @@ assert.notEqual = function notEqual(actual, expected, message) { throw new ERR_MISSING_ARGS('actual', 'expected'); } // eslint-disable-next-line eqeqeq - if (actual == expected) { + if (actual == expected || (NumberIsNaN(actual) && NumberIsNaN(expected))) { innerFail({ actual, expected, diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js index 734ecf6224..b26012923c 100644 --- a/lib/internal/util/comparisons.js +++ b/lib/internal/util/comparisons.js @@ -180,7 +180,7 @@ function innerDeepEqual(val1, val2, strict, memos) { if (val1 === null || typeof val1 !== 'object') { if (val2 === null || typeof val2 !== 'object') { // eslint-disable-next-line eqeqeq - return val1 == val2; + return val1 == val2 || (NumberIsNaN(val1) && NumberIsNaN(val2)); } return false; } |