mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-11 11:27:50 +00:00
Round Infinity with a precision argument returns Infinity (#4272)
* Round Infinity with a precision argument returns Infinity * Also making sure this is true for -Infinity * Tested with _.round(), _.floor() and _.ceil() * Switch to using isFinite to check if number should be rounded * Add tests for rounding NaN now that there is an isFinite check
This commit is contained in:
committed by
John-David Dalton
parent
0b8592a35c
commit
343456d696
@@ -5406,7 +5406,7 @@
|
|||||||
return function(number, precision) {
|
return function(number, precision) {
|
||||||
number = toNumber(number);
|
number = toNumber(number);
|
||||||
precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
|
precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
|
||||||
if (precision) {
|
if (precision && Number.isFinite(number)) {
|
||||||
// Shift with exponential notation to avoid floating-point issues.
|
// Shift with exponential notation to avoid floating-point issues.
|
||||||
// See [MDN](https://mdn.io/round#Examples) for more details.
|
// See [MDN](https://mdn.io/round#Examples) for more details.
|
||||||
var pair = (toString(number) + 'e').split('e'),
|
var pair = (toString(number) + 'e').split('e'),
|
||||||
|
|||||||
68
test/test.js
68
test/test.js
@@ -19810,6 +19810,74 @@
|
|||||||
|
|
||||||
assert.deepEqual(actual, expected);
|
assert.deepEqual(actual, expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test('`_.' + methodName + '` should return `Infinity` given `Infinity` regardless of `precision`', function(assert) {
|
||||||
|
assert.expect(6);
|
||||||
|
|
||||||
|
var actual = func(Infinity);
|
||||||
|
assert.strictEqual(actual, Infinity);
|
||||||
|
|
||||||
|
actual = func(Infinity, 0)
|
||||||
|
assert.strictEqual(actual, Infinity);
|
||||||
|
|
||||||
|
actual = func(Infinity, 2)
|
||||||
|
assert.strictEqual(actual, Infinity);
|
||||||
|
|
||||||
|
actual = func(Infinity, -2)
|
||||||
|
assert.strictEqual(actual, Infinity);
|
||||||
|
|
||||||
|
actual = func(Infinity, 2);
|
||||||
|
assert.strictEqual(actual, isFloor ? Infinity : Infinity);
|
||||||
|
|
||||||
|
actual = func(Infinity, 2);
|
||||||
|
assert.strictEqual(actual, isCeil ? Infinity : Infinity);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('`_.' + methodName + '` should return `-Infinity` given `-Infinity` regardless of `precision`', function(assert) {
|
||||||
|
assert.expect(6);
|
||||||
|
|
||||||
|
var actual = func(-Infinity);
|
||||||
|
assert.strictEqual(actual, -Infinity);
|
||||||
|
|
||||||
|
actual = func(-Infinity, 0)
|
||||||
|
assert.strictEqual(actual, -Infinity);
|
||||||
|
|
||||||
|
actual = func(-Infinity, 2)
|
||||||
|
assert.strictEqual(actual, -Infinity);
|
||||||
|
|
||||||
|
actual = func(-Infinity, -2)
|
||||||
|
assert.strictEqual(actual, -Infinity);
|
||||||
|
|
||||||
|
actual = func(-Infinity, 2);
|
||||||
|
assert.strictEqual(actual, isFloor ? -Infinity : -Infinity);
|
||||||
|
|
||||||
|
actual = func(-Infinity, 2);
|
||||||
|
assert.strictEqual(actual, isCeil ? -Infinity : -Infinity);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('`_.' + methodName + '` should return `NaN` given `NaN` regardless of `precision`', function(assert) {
|
||||||
|
assert.expect(6);
|
||||||
|
|
||||||
|
var actual = func(NaN)
|
||||||
|
assert.deepEqual(actual, NaN);
|
||||||
|
|
||||||
|
actual = func(NaN, 0)
|
||||||
|
assert.deepEqual(actual, NaN);
|
||||||
|
|
||||||
|
actual = func(NaN, 2)
|
||||||
|
assert.deepEqual(actual, NaN);
|
||||||
|
|
||||||
|
actual = func(NaN, -2)
|
||||||
|
assert.deepEqual(actual, NaN);
|
||||||
|
|
||||||
|
actual = func(NaN, 2);
|
||||||
|
assert.deepEqual(actual, isFloor ? NaN : NaN);
|
||||||
|
|
||||||
|
actual = func(NaN, 2);
|
||||||
|
assert.deepEqual(actual, isCeil ? NaN : NaN);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|||||||
Reference in New Issue
Block a user