Add more shortcut fusion tests for _.flow and _.flowRight.

This commit is contained in:
jdalton
2015-06-29 21:13:13 -07:00
parent 7f7c7f360e
commit 29ceed91f0

View File

@@ -2248,20 +2248,32 @@
notStrictEqual(combined, _.identity); notStrictEqual(combined, _.identity);
}); });
test('`_.' + methodName + '` should support shortcut fusion', 6, function() { test('`_.' + methodName + '` should support shortcut fusion', 12, function() {
var filterCount, var filterCount,
mapCount, mapCount;
filter = _.filter,
map = _.map,
take = _.take;
_.filter = _.curry(_.rearg(_.ary(_.filter, 2), 1, 0), 2); var iteratee = function(value) {
_.map = _.curry(_.rearg(_.ary(_.map, 2), 1, 0), 2); mapCount++;
_.take = _.curry(_.rearg(_.ary(_.take, 2), 1, 0), 2); return value * value;
};
var filter2 = _.filter(function(value) { filterCount++; return value % 2 == 0; }), var predicate = function(value) {
map2 = _.map(function(value) { mapCount++; return value * value; }), filterCount++;
take2 = _.take(2); return value % 2 == 0;
};
_.times(2, function(index) {
var filter1 = _.filter,
filter2 = _.curry(_.rearg(_.ary(_.filter, 2), 1, 0), 2),
filter3 = (_.filter = index ? filter2 : filter1, filter2(predicate));
var map1 = _.map,
map2 = _.curry(_.rearg(_.ary(_.map, 2), 1, 0), 2),
map3 = (_.map = index ? map2 : map1, map2(iteratee));
var take1 = _.take,
take2 = _.curry(_.rearg(_.ary(_.take, 2), 1, 0), 2),
take3 = (_.take = index ? take2 : take1, take2(2));
_.times(2, function(index) { _.times(2, function(index) {
var fn = index ? _['_' + methodName] : func; var fn = index ? _['_' + methodName] : func;
@@ -2270,8 +2282,8 @@
return; return;
} }
var combined = isFlow var combined = isFlow
? fn(map2, filter2, _.compact, take2) ? fn(map3, filter3, _.compact, take3)
: fn(take2, _.compact, filter2, map2); : fn(take3, _.compact, filter3, map3);
filterCount = mapCount = 0; filterCount = mapCount = 0;
deepEqual(combined(_.range(200)), [4, 16]); deepEqual(combined(_.range(200)), [4, 16]);
@@ -2285,9 +2297,10 @@
} }
}); });
_.filter = filter; _.filter = filter1;
_.map = map; _.map = map1;
_.take = take; _.take = take1;
});
}); });
test('`_.' + methodName + '` should work with curried functions with placeholders', 1, function() { test('`_.' + methodName + '` should work with curried functions with placeholders', 1, function() {