mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-03 08:37:49 +00:00
Remove Rhino guards from curry tests and add a partial test.
This commit is contained in:
397
test/test.js
397
test/test.js
@@ -2464,152 +2464,107 @@
|
||||
}
|
||||
|
||||
test('should curry based on the number of arguments provided', 3, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curry(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
var curried = _.curry(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
|
||||
deepEqual(curried(1)(2)(3)(4), expected);
|
||||
deepEqual(curried(1, 2)(3, 4), expected);
|
||||
deepEqual(curried(1, 2, 3, 4), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(3);
|
||||
}
|
||||
deepEqual(curried(1)(2)(3)(4), expected);
|
||||
deepEqual(curried(1, 2)(3, 4), expected);
|
||||
deepEqual(curried(1, 2, 3, 4), expected);
|
||||
});
|
||||
|
||||
test('should allow specifying `arity`', 3, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curry(fn, 3),
|
||||
expected = [1, 2, 3];
|
||||
var curried = _.curry(fn, 3),
|
||||
expected = [1, 2, 3];
|
||||
|
||||
deepEqual(curried(1)(2, 3), expected);
|
||||
deepEqual(curried(1, 2)(3), expected);
|
||||
deepEqual(curried(1, 2, 3), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(3);
|
||||
}
|
||||
deepEqual(curried(1)(2, 3), expected);
|
||||
deepEqual(curried(1, 2)(3), expected);
|
||||
deepEqual(curried(1, 2, 3), expected);
|
||||
});
|
||||
|
||||
test('should coerce `arity` to a number', 2, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var values = ['0', 'xyz'],
|
||||
expected = _.map(values, _.constant([]));
|
||||
var values = ['0', 'xyz'],
|
||||
expected = _.map(values, _.constant([]));
|
||||
|
||||
var actual = _.map(values, function(arity) {
|
||||
return _.curry(fn, arity)();
|
||||
});
|
||||
var actual = _.map(values, function(arity) {
|
||||
return _.curry(fn, arity)();
|
||||
});
|
||||
|
||||
deepEqual(actual, expected);
|
||||
deepEqual(_.curry(fn, '2')(1)(2), [1, 2]);
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
});
|
||||
|
||||
test('should work with partialed methods', 2, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curry(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
|
||||
var a = _.partial(curried, 1),
|
||||
b = _.bind(a, null, 2),
|
||||
c = _.partialRight(b, 4),
|
||||
d = _.partialRight(b(3), 4);
|
||||
|
||||
deepEqual(c(3), expected);
|
||||
deepEqual(d(), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
deepEqual(actual, expected);
|
||||
deepEqual(_.curry(fn, '2')(1)(2), [1, 2]);
|
||||
});
|
||||
|
||||
test('should support placeholders', 4, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curry(fn),
|
||||
ph = curried.placeholder;
|
||||
var curried = _.curry(fn),
|
||||
ph = curried.placeholder;
|
||||
|
||||
deepEqual(curried(1)(ph, 3)(ph, 4)(2), [1, 2, 3, 4]);
|
||||
deepEqual(curried(ph, 2)(1)(ph, 4)(3), [1, 2, 3, 4]);
|
||||
deepEqual(curried(ph, ph, 3)(ph, 2)(ph, 4)(1), [1, 2, 3, 4]);
|
||||
deepEqual(curried(ph, ph, ph, 4)(ph, ph, 3)(ph, 2)(1), [1, 2, 3, 4]);
|
||||
}
|
||||
else {
|
||||
skipTest(4);
|
||||
}
|
||||
deepEqual(curried(1)(ph, 3)(ph, 4)(2), [1, 2, 3, 4]);
|
||||
deepEqual(curried(ph, 2)(1)(ph, 4)(3), [1, 2, 3, 4]);
|
||||
deepEqual(curried(ph, ph, 3)(ph, 2)(ph, 4)(1), [1, 2, 3, 4]);
|
||||
deepEqual(curried(ph, ph, ph, 4)(ph, ph, 3)(ph, 2)(1), [1, 2, 3, 4]);
|
||||
});
|
||||
|
||||
test('should work with partialed methods', 2, function() {
|
||||
var curried = _.curry(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
|
||||
var a = _.partial(curried, 1),
|
||||
b = _.bind(a, null, 2),
|
||||
c = _.partialRight(b, 4),
|
||||
d = _.partialRight(b(3), 4);
|
||||
|
||||
deepEqual(c(3), expected);
|
||||
deepEqual(d(), expected);
|
||||
});
|
||||
|
||||
test('should provide additional arguments after reaching the target arity', 3, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curry(fn, 3);
|
||||
deepEqual(curried(1)(2, 3, 4), [1, 2, 3, 4]);
|
||||
deepEqual(curried(1, 2)(3, 4, 5), [1, 2, 3, 4, 5]);
|
||||
deepEqual(curried(1, 2, 3, 4, 5, 6), [1, 2, 3, 4, 5, 6]);
|
||||
}
|
||||
else {
|
||||
skipTest(3);
|
||||
}
|
||||
var curried = _.curry(fn, 3);
|
||||
deepEqual(curried(1)(2, 3, 4), [1, 2, 3, 4]);
|
||||
deepEqual(curried(1, 2)(3, 4, 5), [1, 2, 3, 4, 5]);
|
||||
deepEqual(curried(1, 2, 3, 4, 5, 6), [1, 2, 3, 4, 5, 6]);
|
||||
});
|
||||
|
||||
test('should return a function with a `length` of `0`', 6, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
_.times(2, function(index) {
|
||||
var curried = index ? _.curry(fn, 4) : _.curry(fn);
|
||||
strictEqual(curried.length, 0);
|
||||
strictEqual(curried(1).length, 0);
|
||||
strictEqual(curried(1, 2).length, 0);
|
||||
});
|
||||
}
|
||||
else {
|
||||
skipTest(6);
|
||||
}
|
||||
_.times(2, function(index) {
|
||||
var curried = index ? _.curry(fn, 4) : _.curry(fn);
|
||||
strictEqual(curried.length, 0);
|
||||
strictEqual(curried(1).length, 0);
|
||||
strictEqual(curried(1, 2).length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
test('ensure `new curried` is an instance of `func`', 2, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var Foo = function(value) {
|
||||
return value && object;
|
||||
};
|
||||
var Foo = function(value) {
|
||||
return value && object;
|
||||
};
|
||||
|
||||
var curried = _.curry(Foo),
|
||||
object = {};
|
||||
var curried = _.curry(Foo),
|
||||
object = {};
|
||||
|
||||
ok(new curried(false) instanceof Foo);
|
||||
strictEqual(new curried(true), object);
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
ok(new curried(false) instanceof Foo);
|
||||
strictEqual(new curried(true), object);
|
||||
});
|
||||
|
||||
test('should not set a `this` binding', 9, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var fn = function(a, b, c) {
|
||||
var value = this || {};
|
||||
return [value[a], value[b], value[c]];
|
||||
};
|
||||
var fn = function(a, b, c) {
|
||||
var value = this || {};
|
||||
return [value[a], value[b], value[c]];
|
||||
};
|
||||
|
||||
var object = { 'a': 1, 'b': 2, 'c': 3 },
|
||||
expected = [1, 2, 3];
|
||||
var object = { 'a': 1, 'b': 2, 'c': 3 },
|
||||
expected = [1, 2, 3];
|
||||
|
||||
deepEqual(_.curry(_.bind(fn, object), 3)('a')('b')('c'), expected);
|
||||
deepEqual(_.curry(_.bind(fn, object), 3)('a', 'b')('c'), expected);
|
||||
deepEqual(_.curry(_.bind(fn, object), 3)('a', 'b', 'c'), expected);
|
||||
deepEqual(_.curry(_.bind(fn, object), 3)('a')('b')('c'), expected);
|
||||
deepEqual(_.curry(_.bind(fn, object), 3)('a', 'b')('c'), expected);
|
||||
deepEqual(_.curry(_.bind(fn, object), 3)('a', 'b', 'c'), expected);
|
||||
|
||||
deepEqual(_.bind(_.curry(fn), object)('a')('b')('c'), Array(3));
|
||||
deepEqual(_.bind(_.curry(fn), object)('a', 'b')('c'), Array(3));
|
||||
deepEqual(_.bind(_.curry(fn), object)('a', 'b', 'c'), expected);
|
||||
deepEqual(_.bind(_.curry(fn), object)('a')('b')('c'), Array(3));
|
||||
deepEqual(_.bind(_.curry(fn), object)('a', 'b')('c'), Array(3));
|
||||
deepEqual(_.bind(_.curry(fn), object)('a', 'b', 'c'), expected);
|
||||
|
||||
object.curried = _.curry(fn);
|
||||
deepEqual(object.curried('a')('b')('c'), Array(3));
|
||||
deepEqual(object.curried('a', 'b')('c'), Array(3));
|
||||
deepEqual(object.curried('a', 'b', 'c'), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(9);
|
||||
}
|
||||
object.curried = _.curry(fn);
|
||||
deepEqual(object.curried('a')('b')('c'), Array(3));
|
||||
deepEqual(object.curried('a', 'b')('c'), Array(3));
|
||||
deepEqual(object.curried('a', 'b', 'c'), expected);
|
||||
});
|
||||
}());
|
||||
|
||||
@@ -2623,136 +2578,96 @@
|
||||
}
|
||||
|
||||
test('should curry based on the number of arguments provided', 3, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curryRight(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
var curried = _.curryRight(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
|
||||
deepEqual(curried(4)(3)(2)(1), expected);
|
||||
deepEqual(curried(3, 4)(1, 2), expected);
|
||||
deepEqual(curried(1, 2, 3, 4), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(3);
|
||||
}
|
||||
deepEqual(curried(4)(3)(2)(1), expected);
|
||||
deepEqual(curried(3, 4)(1, 2), expected);
|
||||
deepEqual(curried(1, 2, 3, 4), expected);
|
||||
});
|
||||
|
||||
test('should allow specifying `arity`', 3, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curryRight(fn, 3),
|
||||
expected = [1, 2, 3];
|
||||
var curried = _.curryRight(fn, 3),
|
||||
expected = [1, 2, 3];
|
||||
|
||||
deepEqual(curried(3)(1, 2), expected);
|
||||
deepEqual(curried(2, 3)(1), expected);
|
||||
deepEqual(curried(1, 2, 3), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(3);
|
||||
}
|
||||
deepEqual(curried(3)(1, 2), expected);
|
||||
deepEqual(curried(2, 3)(1), expected);
|
||||
deepEqual(curried(1, 2, 3), expected);
|
||||
});
|
||||
|
||||
test('should work with partialed methods', 2, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curryRight(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
var curried = _.curryRight(fn),
|
||||
expected = [1, 2, 3, 4];
|
||||
|
||||
var a = _.partialRight(curried, 4),
|
||||
b = _.partialRight(a, 3),
|
||||
c = _.bind(b, null, 1),
|
||||
d = _.partial(b(2), 1);
|
||||
var a = _.partialRight(curried, 4),
|
||||
b = _.partialRight(a, 3),
|
||||
c = _.bind(b, null, 1),
|
||||
d = _.partial(b(2), 1);
|
||||
|
||||
deepEqual(c(2), expected);
|
||||
deepEqual(d(), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
deepEqual(c(2), expected);
|
||||
deepEqual(d(), expected);
|
||||
});
|
||||
|
||||
test('should support placeholders', 4, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curryRight(fn),
|
||||
expected = [1, 2, 3, 4],
|
||||
ph = curried.placeholder;
|
||||
var curried = _.curryRight(fn),
|
||||
expected = [1, 2, 3, 4],
|
||||
ph = curried.placeholder;
|
||||
|
||||
deepEqual(curried(4)(2, ph)(1, ph)(3), expected);
|
||||
deepEqual(curried(3, ph)(4)(1, ph)(2), expected);
|
||||
deepEqual(curried(ph, ph, 4)(ph, 3)(ph, 2)(1), expected);
|
||||
deepEqual(curried(ph, ph, ph, 4)(ph, ph, 3)(ph, 2)(1), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(4);
|
||||
}
|
||||
deepEqual(curried(4)(2, ph)(1, ph)(3), expected);
|
||||
deepEqual(curried(3, ph)(4)(1, ph)(2), expected);
|
||||
deepEqual(curried(ph, ph, 4)(ph, 3)(ph, 2)(1), expected);
|
||||
deepEqual(curried(ph, ph, ph, 4)(ph, ph, 3)(ph, 2)(1), expected);
|
||||
});
|
||||
|
||||
test('should provide additional arguments after reaching the target arity', 3, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var curried = _.curryRight(fn, 3);
|
||||
deepEqual(curried(4)(1, 2, 3), [1, 2, 3, 4]);
|
||||
deepEqual(curried(4, 5)(1, 2, 3), [1, 2, 3, 4, 5]);
|
||||
deepEqual(curried(1, 2, 3, 4, 5, 6), [1, 2, 3, 4, 5, 6]);
|
||||
}
|
||||
else {
|
||||
skipTest(3);
|
||||
}
|
||||
var curried = _.curryRight(fn, 3);
|
||||
deepEqual(curried(4)(1, 2, 3), [1, 2, 3, 4]);
|
||||
deepEqual(curried(4, 5)(1, 2, 3), [1, 2, 3, 4, 5]);
|
||||
deepEqual(curried(1, 2, 3, 4, 5, 6), [1, 2, 3, 4, 5, 6]);
|
||||
});
|
||||
|
||||
test('should return a function with a `length` of `0`', 6, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
_.times(2, function(index) {
|
||||
var curried = index ? _.curryRight(fn, 4) : _.curryRight(fn);
|
||||
strictEqual(curried.length, 0);
|
||||
strictEqual(curried(4).length, 0);
|
||||
strictEqual(curried(3, 4).length, 0);
|
||||
});
|
||||
}
|
||||
else {
|
||||
skipTest(6);
|
||||
}
|
||||
_.times(2, function(index) {
|
||||
var curried = index ? _.curryRight(fn, 4) : _.curryRight(fn);
|
||||
strictEqual(curried.length, 0);
|
||||
strictEqual(curried(4).length, 0);
|
||||
strictEqual(curried(3, 4).length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
test('ensure `new curried` is an instance of `func`', 2, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var Foo = function(value) {
|
||||
return value && object;
|
||||
};
|
||||
var Foo = function(value) {
|
||||
return value && object;
|
||||
};
|
||||
|
||||
var curried = _.curryRight(Foo),
|
||||
object = {};
|
||||
var curried = _.curryRight(Foo),
|
||||
object = {};
|
||||
|
||||
ok(new curried(false) instanceof Foo);
|
||||
strictEqual(new curried(true), object);
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
ok(new curried(false) instanceof Foo);
|
||||
strictEqual(new curried(true), object);
|
||||
});
|
||||
|
||||
test('should not set a `this` binding', 9, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var fn = function(a, b, c) {
|
||||
var value = this || {};
|
||||
return [value[a], value[b], value[c]];
|
||||
};
|
||||
var fn = function(a, b, c) {
|
||||
var value = this || {};
|
||||
return [value[a], value[b], value[c]];
|
||||
};
|
||||
|
||||
var object = { 'a': 1, 'b': 2, 'c': 3 },
|
||||
expected = [1, 2, 3];
|
||||
var object = { 'a': 1, 'b': 2, 'c': 3 },
|
||||
expected = [1, 2, 3];
|
||||
|
||||
deepEqual(_.curryRight(_.bind(fn, object), 3)('c')('b')('a'), expected);
|
||||
deepEqual(_.curryRight(_.bind(fn, object), 3)('b', 'c')('a'), expected);
|
||||
deepEqual(_.curryRight(_.bind(fn, object), 3)('a', 'b', 'c'), expected);
|
||||
deepEqual(_.curryRight(_.bind(fn, object), 3)('c')('b')('a'), expected);
|
||||
deepEqual(_.curryRight(_.bind(fn, object), 3)('b', 'c')('a'), expected);
|
||||
deepEqual(_.curryRight(_.bind(fn, object), 3)('a', 'b', 'c'), expected);
|
||||
|
||||
deepEqual(_.bind(_.curryRight(fn), object)('c')('b')('a'), Array(3));
|
||||
deepEqual(_.bind(_.curryRight(fn), object)('b', 'c')('a'), Array(3));
|
||||
deepEqual(_.bind(_.curryRight(fn), object)('a', 'b', 'c'), expected);
|
||||
deepEqual(_.bind(_.curryRight(fn), object)('c')('b')('a'), Array(3));
|
||||
deepEqual(_.bind(_.curryRight(fn), object)('b', 'c')('a'), Array(3));
|
||||
deepEqual(_.bind(_.curryRight(fn), object)('a', 'b', 'c'), expected);
|
||||
|
||||
object.curried = _.curryRight(fn);
|
||||
deepEqual(object.curried('c')('b')('a'), Array(3));
|
||||
deepEqual(object.curried('b', 'c')('a'), Array(3));
|
||||
deepEqual(object.curried('a', 'b', 'c'), expected);
|
||||
}
|
||||
else {
|
||||
skipTest(9);
|
||||
}
|
||||
object.curried = _.curryRight(fn);
|
||||
deepEqual(object.curried('c')('b')('a'), Array(3));
|
||||
deepEqual(object.curried('b', 'c')('a'), Array(3));
|
||||
deepEqual(object.curried('a', 'b', 'c'), expected);
|
||||
});
|
||||
}());
|
||||
|
||||
@@ -8846,7 +8761,8 @@
|
||||
|
||||
_.each(['partial', 'partialRight'], function(methodName) {
|
||||
var func = _[methodName],
|
||||
isPartial = methodName == 'partial';
|
||||
isPartial = methodName == 'partial',
|
||||
ph = func.placeholder;
|
||||
|
||||
test('`_.' + methodName + '` partially applies arguments', 1, function() {
|
||||
var par = func(_.identity, 'a');
|
||||
@@ -8875,7 +8791,6 @@
|
||||
|
||||
test('`_.' + methodName + '` should support placeholders', 4, function() {
|
||||
var fn = function() { return slice.call(arguments); },
|
||||
ph = func.placeholder,
|
||||
par = func(fn, ph, 'b', ph);
|
||||
|
||||
deepEqual(par('a', 'c'), ['a', 'b', 'c']);
|
||||
@@ -8938,16 +8853,19 @@
|
||||
});
|
||||
|
||||
test('`_.' + methodName + '` should work with curried methods', 2, function() {
|
||||
if (!(isRhino && isModularize)) {
|
||||
var fn = function(a, b, c) { return a + b + c; },
|
||||
curried = _.curry(func(fn, 1), 2);
|
||||
var fn = function(a, b, c) { return a + b + c; },
|
||||
curried = _.curry(func(fn, 1), 2);
|
||||
|
||||
strictEqual(curried(2, 3), 6);
|
||||
strictEqual(curried(2)(3), 6);
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
strictEqual(curried(2, 3), 6);
|
||||
strictEqual(curried(2)(3), 6);
|
||||
});
|
||||
|
||||
test('should work with placeholders and curried methods', 1, function() {
|
||||
var fn = function() { return slice.call(arguments); },
|
||||
curried = _.curry(fn),
|
||||
par = func(curried, ph, 'b', ph, 'd');
|
||||
|
||||
deepEqual(par('a', 'c'), ['a', 'b', 'c', 'd']);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -9105,6 +9023,20 @@
|
||||
deepEqual(actual, [object, 1, 2, 3]);
|
||||
});
|
||||
|
||||
_.each(['curry', 'curryRight'], function(methodName) {
|
||||
function fn(a, b, c) {
|
||||
return [a, b, c];
|
||||
}
|
||||
|
||||
var curried = _[methodName](fn);
|
||||
|
||||
var actual = _.last(_.times(HOT_COUNT, function() {
|
||||
return curried(1)(2)(3);
|
||||
}));
|
||||
|
||||
deepEqual(actual, methodName == 'curry' ? [1, 2, 3] : [3, 2, 1]);
|
||||
});
|
||||
|
||||
_.each(['partial', 'partialRight'], function(methodName) {
|
||||
function fn() {
|
||||
return slice.call(arguments);
|
||||
@@ -9120,25 +9052,6 @@
|
||||
|
||||
deepEqual(actual, methodName == 'partial' ? [1, 2, 3] : [3, 2, 1]);
|
||||
});
|
||||
|
||||
if (!(isRhino && isModularize)) {
|
||||
_.each(['curry', 'curryRight'], function(methodName) {
|
||||
function fn(a, b, c) {
|
||||
return [a, b, c];
|
||||
}
|
||||
|
||||
var curried = _[methodName](fn);
|
||||
|
||||
var actual = _.last(_.times(HOT_COUNT, function() {
|
||||
return curried(1)(2)(3);
|
||||
}));
|
||||
|
||||
deepEqual(actual, methodName == 'curry' ? [1, 2, 3] : [3, 2, 1]);
|
||||
});
|
||||
}
|
||||
else {
|
||||
skipTest(2);
|
||||
}
|
||||
});
|
||||
}());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user