toBeCloseTo treats Infinity and -Infinity as close to themselves
* Fixes #1957
This commit is contained in:
@@ -5961,6 +5961,14 @@ getJasmineRequireObj().toBeCloseTo = function() {
|
||||
);
|
||||
}
|
||||
|
||||
// Infinity is close to Infinity and -Infinity is close to -Infinity,
|
||||
// regardless of the precision.
|
||||
if (expected === Infinity || expected === -Infinity) {
|
||||
return {
|
||||
pass: actual === expected
|
||||
};
|
||||
}
|
||||
|
||||
var pow = Math.pow(10, precision + 1);
|
||||
var delta = Math.abs(expected - actual);
|
||||
var maxDelta = Math.pow(10, -precision) / 2;
|
||||
|
||||
@@ -110,4 +110,42 @@ describe('toBeCloseTo', function() {
|
||||
result = matcher.compare(-2.82665525779431, -2.82666, 5);
|
||||
expect(result.pass).toBe(true);
|
||||
});
|
||||
|
||||
describe('Infinity handling', function() {
|
||||
it('passes when the actual and expected are both Infinity', function() {
|
||||
const matcher = jasmineUnderTest.matchers.toBeCloseTo();
|
||||
const result = matcher.compare(Infinity, Infinity, 0);
|
||||
expect(result.pass).toBe(true);
|
||||
});
|
||||
|
||||
it('passes when the actual and expected are both -Infinity', function() {
|
||||
const matcher = jasmineUnderTest.matchers.toBeCloseTo();
|
||||
const result = matcher.compare(-Infinity, -Infinity, 0);
|
||||
expect(result.pass).toBe(true);
|
||||
});
|
||||
|
||||
it('fails when the actual is Infinity and the expected is -Infinity', function() {
|
||||
const matcher = jasmineUnderTest.matchers.toBeCloseTo();
|
||||
const result = matcher.compare(Infinity, -Infinity, 0);
|
||||
expect(result.pass).toBe(false);
|
||||
});
|
||||
|
||||
it('fails when the actual is -Infinity and the expected is Infinity', function() {
|
||||
const matcher = jasmineUnderTest.matchers.toBeCloseTo();
|
||||
const result = matcher.compare(-Infinity, Infinity, 0);
|
||||
expect(result.pass).toBe(false);
|
||||
});
|
||||
|
||||
it('fails when the actual is a number and the expected is Infinity', function() {
|
||||
const matcher = jasmineUnderTest.matchers.toBeCloseTo();
|
||||
const result = matcher.compare(42, Infinity, 0);
|
||||
expect(result.pass).toBe(false);
|
||||
});
|
||||
|
||||
it('fails when the actual is a number and the expected is -Infinity', function() {
|
||||
const matcher = jasmineUnderTest.matchers.toBeCloseTo();
|
||||
const result = matcher.compare(42, -Infinity, 0);
|
||||
expect(result.pass).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -27,6 +27,14 @@ getJasmineRequireObj().toBeCloseTo = function() {
|
||||
);
|
||||
}
|
||||
|
||||
// Infinity is close to Infinity and -Infinity is close to -Infinity,
|
||||
// regardless of the precision.
|
||||
if (expected === Infinity || expected === -Infinity) {
|
||||
return {
|
||||
pass: actual === expected
|
||||
};
|
||||
}
|
||||
|
||||
var pow = Math.pow(10, precision + 1);
|
||||
var delta = Math.abs(expected - actual);
|
||||
var maxDelta = Math.pow(10, -precision) / 2;
|
||||
|
||||
Reference in New Issue
Block a user