From 60c44910df845da160577d6e5a84e8106eba5efd Mon Sep 17 00:00:00 2001 From: jdalton Date: Tue, 10 Feb 2015 21:54:00 -0800 Subject: [PATCH] Fix lazy `slice` when used after `filter`. [closes #955] --- lodash.src.js | 2 +- test/test.js | 43 +++++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/lodash.src.js b/lodash.src.js index 6b6196629..1bcb88eff 100644 --- a/lodash.src.js +++ b/lodash.src.js @@ -1248,7 +1248,7 @@ end = view.end, length = end - start, dropCount = this.__dropCount__, - takeCount = nativeMin(length, this.__takeCount__ - dropCount), + takeCount = nativeMin(length, this.__takeCount__), index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees ? iteratees.length : 0, diff --git a/test/test.js b/test/test.js index 8a8323e80..872d639b9 100644 --- a/test/test.js +++ b/test/test.js @@ -12044,35 +12044,38 @@ notStrictEqual(actual, array); }); - test('should work in a lazy chain sequence', 18, function() { + test('should work in a lazy chain sequence', 38, function() { if (!isNpm) { var wrapped = _(array); - deepEqual(wrapped.slice(0, -1).value(), [1, 2]); - deepEqual(wrapped.slice(1).value(), [2, 3]); - deepEqual(wrapped.slice(-1).value(), [3]); + _.each(['map', 'filter'], function(methodName) { + deepEqual(wrapped[methodName]().slice(0, -1).value(), [1, 2]); + deepEqual(wrapped[methodName]().slice(1).value(), [2, 3]); + deepEqual(wrapped[methodName]().slice(1, 3).value(), [2, 3]); + deepEqual(wrapped[methodName]().slice(-1).value(), [3]); - deepEqual(wrapped.slice(4).value(), []); - deepEqual(wrapped.slice(3, 2).value(), []); - deepEqual(wrapped.slice(0, -4).value(), []); - deepEqual(wrapped.slice(0, null).value(), []); + deepEqual(wrapped[methodName]().slice(4).value(), []); + deepEqual(wrapped[methodName]().slice(3, 2).value(), []); + deepEqual(wrapped[methodName]().slice(0, -4).value(), []); + deepEqual(wrapped[methodName]().slice(0, null).value(), []); - deepEqual(wrapped.slice(0, 4).value(), array); - deepEqual(wrapped.slice(-4).value(), array); - deepEqual(wrapped.slice(null).value(), array); + deepEqual(wrapped[methodName]().slice(0, 4).value(), array); + deepEqual(wrapped[methodName]().slice(-4).value(), array); + deepEqual(wrapped[methodName]().slice(null).value(), array); - deepEqual(wrapped.slice(0, 1).value(), [1]); - deepEqual(wrapped.slice(NaN, '1').value(), [1]); + deepEqual(wrapped[methodName]().slice(0, 1).value(), [1]); + deepEqual(wrapped[methodName]().slice(NaN, '1').value(), [1]); - deepEqual(wrapped.slice(0.1, 1.1).value(), [1]); - deepEqual(wrapped.slice('0', 1).value(), [1]); - deepEqual(wrapped.slice(0, '1').value(), [1]); - deepEqual(wrapped.slice('1').value(), [2, 3]); - deepEqual(wrapped.slice(NaN, 1).value(), [1]); - deepEqual(wrapped.slice(1, NaN).value(), []); + deepEqual(wrapped[methodName]().slice(0.1, 1.1).value(), [1]); + deepEqual(wrapped[methodName]().slice('0', 1).value(), [1]); + deepEqual(wrapped[methodName]().slice(0, '1').value(), [1]); + deepEqual(wrapped[methodName]().slice('1').value(), [2, 3]); + deepEqual(wrapped[methodName]().slice(NaN, 1).value(), [1]); + deepEqual(wrapped[methodName]().slice(1, NaN).value(), []); + }); } else { - skipTest(18); + skipTest(38); } }); }());