Skip to main content
Module

x/ramda/test/lift.js

:ram: Practical functional Javascript
Latest
File

var R = require('../source');var eq = require('./shared/eq');var Maybe = require('./shared/Maybe');

var add3 = R.curry(function add3(a, b, c) { return a + b + c;});var add4 = R.curry(function add4(a, b, c, d) { return a + b + c + d;});var add5 = R.curry(function add5(a, b, c, d, e) { return a + b + c + d + e;});var madd3 = R.lift(add3);var madd4 = R.lift(add4);var madd5 = R.lift(add5);

describe('lift', function() {
it('returns a function if called with just a function', function() { eq(typeof R.lift(R.add), 'function'); });
it('produces a cross-product of array values', function() { eq(madd3([1, 2, 3], [1, 2], [1, 2, 3]), [3, 4, 5, 4, 5, 6, 4, 5, 6, 5, 6, 7, 5, 6, 7, 6, 7, 8]); eq(madd3([1], [2], [3]), [6]); eq(madd3([1, 2], [3, 4], [5, 6]), [9, 10, 10, 11, 10, 11, 11, 12]); });
it('can lift functions of any arity', function() { eq(madd3([1, 10], [2], [3]), [6, 15]); eq(madd4([1, 10], [2], [3], [40]), [46, 55]); eq(madd5([1, 10], [2], [3], [40], [500, 1000]), [546, 1046, 555, 1055]); });
it('works with other functors such as "Maybe"', function() { var addM = R.lift(R.add); eq(addM(Maybe.Just(3), Maybe.Just(5)), Maybe.Just(8)); });
});