diff --git a/lodash.js b/lodash.js index 2b98a1b54..f5b0162e5 100644 --- a/lodash.js +++ b/lodash.js @@ -2746,7 +2746,7 @@ } else { n = (predicate == null || thisArg) ? 1 : predicate; } - n = length - n; + n = length - (n || 0); return slice(array, 0, n < 0 ? 0 : n); } @@ -2840,8 +2840,8 @@ return array ? array[length - 1] : undefined; } } - n = length - n; - return slice(array, n < 0 ? 0 : n); + n = length - (n || 0); + return slice(array, n < 0 ? 0 : n); } /** diff --git a/test/test.js b/test/test.js index 5c896128d..b3f95a6f0 100644 --- a/test/test.js +++ b/test/test.js @@ -2577,14 +2577,14 @@ deepEqual(_.first(array, 2), [1, 2]); }); - test('should return an empty array when `n` < `1`', 3, function() { - _.forEach([0, -1, -2], function(n) { + test('should return an empty array when `n` < `1`', 4, function() { + _.forEach([0, -1, NaN, -Infinity], function(n) { deepEqual(_.first(array, n), []); }); }); - test('should return all elements when `n` >= `array.length`', 2, function() { - _.forEach([3, 4], function(n) { + test('should return all elements when `n` >= `array.length`', 4, function() { + _.forEach([3, 4, Math.pow(2, 32), Infinity], function(n) { deepEqual(_.first(array, n), array); }); }); @@ -3644,14 +3644,14 @@ deepEqual(_.initial([]), []); }); - test('should return all elements when `n` < `1`', 3, function() { - _.forEach([0, -1, -2], function(n) { + test('should return all elements when `n` < `1`', 4, function() { + _.forEach([0, -1, NaN, -Infinity], function(n) { deepEqual(_.initial(array, n), array); }); }); - test('should return an empty array when `n` >= `array.length`', 2, function() { - _.forEach([3, 4], function(n) { + test('should return an empty array when `n` >= `array.length`', 4, function() { + _.forEach([3, 4, Math.pow(2, 32), Infinity], function(n) { deepEqual(_.initial(array, n), []); }); }); @@ -5315,14 +5315,14 @@ deepEqual(_.last(array, 2), [2, 3]); }); - test('should return an empty array when `n` < `1`', 3, function() { - _.forEach([0, -1, -2], function(n) { + test('should return an empty array when `n` < `1`', 4, function() { + _.forEach([0, -1, NaN, -Infinity], function(n) { deepEqual(_.last(array, n), []); }); }); - test('should return all elements when `n` >= `array.length`', 2, function() { - _.forEach([3, 4], function(n) { + test('should return all elements when `n` >= `array.length`', 4, function() { + _.forEach([3, 4, Math.pow(2, 32), Infinity], function(n) { deepEqual(_.last(array, n), array); }); }); @@ -7362,14 +7362,14 @@ deepEqual(_.rest(array, 2), [3]); }); - test('should return all elements when `n` < `1`', 3, function() { - _.forEach([0, -1, -2], function(n) { + test('should return all elements when `n` < `1`', 4, function() { + _.forEach([0, -1, NaN, -Infinity], function(n) { deepEqual(_.rest(array, n), [1, 2, 3]); }); }); - test('should return an empty array when `n` >= `array.length`', 2, function() { - _.forEach([3, 4], function(n) { + test('should return an empty array when `n` >= `array.length`', 4, function() { + _.forEach([3, 4, Math.pow(2, 32), Infinity], function(n) { deepEqual(_.rest(array, n), []); }); });