From 97fe2e7c95e92e185bc83591f589fe01f0859a64 Mon Sep 17 00:00:00 2001 From: Nicolas DUBIEN Date: Thu, 31 Oct 2019 00:27:20 +0100 Subject: [PATCH] Fix: Jasmine reports toEqual(0, Number.MIN_VALUE) to be true --- lib/jasmine-core/jasmine.js | 2 +- spec/core/matchers/toEqualSpec.js | 8 ++++++++ src/core/matchers/matchersUtil.js | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 64365dd2..5321f2d0 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -4321,7 +4321,7 @@ getJasmineRequireObj().matchersUtil = function(j$) { case '[object Number]': // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for // other numeric values. - result = a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + result = a != +a ? b != +b : (a === 0 && b === 0 ? 1 / a == 1 / b : a == +b); if (!result) { diffBuilder.record(a, b); } diff --git a/spec/core/matchers/toEqualSpec.js b/spec/core/matchers/toEqualSpec.js index ca23679f..69651a81 100644 --- a/spec/core/matchers/toEqualSpec.js +++ b/spec/core/matchers/toEqualSpec.js @@ -334,6 +334,14 @@ describe("toEqual", function() { expect(compareEquals(actual, expected).message).toEqual(message); }); + it("reports mismatches between 0 and Number.MIN_VALUE", function() { + var actual = {x: 0}, + expected = {x: Number.MIN_VALUE}, + message = "Expected $.x = 0 to equal 5e-324."; + + expect(compareEquals(actual, expected).message).toEqual(message); + }); + it("reports mismatches between Errors", function() { var actual = {x: new Error("the error you got")}, expected = {x: new Error("the error you want")}, diff --git a/src/core/matchers/matchersUtil.js b/src/core/matchers/matchersUtil.js index 522759a5..7183d5e7 100644 --- a/src/core/matchers/matchersUtil.js +++ b/src/core/matchers/matchersUtil.js @@ -162,7 +162,7 @@ getJasmineRequireObj().matchersUtil = function(j$) { case '[object Number]': // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for // other numeric values. - result = a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + result = a != +a ? b != +b : (a === 0 && b === 0 ? 1 / a == 1 / b : a == +b); if (!result) { diffBuilder.record(a, b); }