From 69a7449e508907c50c547f6d087cb1a329c24622 Mon Sep 17 00:00:00 2001 From: Paul van Brenk Date: Sun, 19 May 2019 12:46:32 -0400 Subject: [PATCH] Fix toBeCloseTo matcher for Node.js 12 and Chrome 74 --- spec/core/matchers/toBeCloseToSpec.js | 14 ++++++++++++++ src/core/matchers/toBeCloseTo.js | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/spec/core/matchers/toBeCloseToSpec.js b/spec/core/matchers/toBeCloseToSpec.js index bf04c153..402ce88e 100644 --- a/spec/core/matchers/toBeCloseToSpec.js +++ b/spec/core/matchers/toBeCloseToSpec.js @@ -90,4 +90,18 @@ describe("toBeCloseTo", function() { result = matcher.compare(1.23, 1.234); expect(result.pass).toBe(true); }); + + it("handles edge cases with rounding", function () { + var matcher = jasmineUnderTest.matchers.toBeCloseTo(), + result; + + // these cases resulted in false negatives in version of V8 + // included in Node.js 12 and Chrome 74 (and Edge Chromium) + result = matcher.compare(4.030904708957288, 4.0309, 5); + expect(result.pass).toBe(true); + result = matcher.compare(4.82665525779431,4.82666, 5); + expect(result.pass).toBe(true); + result = matcher.compare(-2.82665525779431, -2.82666, 5); + expect(result.pass).toBe(true); + }); }); diff --git a/src/core/matchers/toBeCloseTo.js b/src/core/matchers/toBeCloseTo.js index 31c79456..b57ca1ad 100644 --- a/src/core/matchers/toBeCloseTo.js +++ b/src/core/matchers/toBeCloseTo.js @@ -26,7 +26,7 @@ getJasmineRequireObj().toBeCloseTo = function() { var maxDelta = Math.pow(10, -precision) / 2; return { - pass: Math.round(delta * pow) / pow <= maxDelta + pass: Math.round(delta * pow) <= maxDelta * pow }; } };