moy-fp
Version:
A functional programming library.
352 lines (204 loc) • 4.88 kB
JavaScript
import __ from '../../src/Function/__'
/**
* ((a, b, c, ..., m) -> n) -> ((a, b, c, ..., m) -> n)
*/
import curry from '../../src/Function/curry'
test('curry(not using __), the original arity is 0', () => {
let fn = curry(() => 1)
expect(fn.length).toBe(0)
expect(
fn()
).toBe(1)
})
test('curry(not using __), the original arity is 1', () => {
let fn = curry(a => a)
expect(fn.length).toBe(1)
expect(
fn(1)
).toBe(1)
})
test('curry(not using __), the original arities are 2', () => {
let fn = curry((a, b) => a + b)
expect(fn.length).toBe(2)
fn = fn(1)
expect(fn.length).toBe(1)
expect(
fn(2)
).toBe(3)
})
test('curry(not using __), the original arities are 3', () => {
let fn = curry((a, b, c) => a + b + c)
expect(fn.length).toBe(3)
fn = fn(1)
expect(fn.length).toBe(2)
fn = fn(2)
expect(fn.length).toBe(1)
expect(
fn(3)
).toBe(6)
})
test('curry(not using __), the original arities are 4', () => {
let fn = curry((a, b, c, d) => a + b + c + d)
expect(fn.length).toBe(4)
fn = fn(1)
expect(fn.length).toBe(3)
fn = fn(2)
expect(fn.length).toBe(2)
fn = fn(3)
expect(fn.length).toBe(1)
expect(
fn(4)
).toBe(10)
})
test('curry(not using __), the original arities are 5', () => {
let fn = curry((a, b, c, d, e) => a + b + c + d + e)
expect(fn.length).toBe(5)
fn = fn(1)
expect(fn.length).toBe(4)
fn = fn(2)
expect(fn.length).toBe(3)
fn = fn(3)
expect(fn.length).toBe(2)
fn = fn(4)
expect(fn.length).toBe(1)
expect(
fn(5)
).toBe(15)
})
test('curry(not using __), the original arities are 6', () => {
let fn = curry((a, b, c, d, e, f) => a + b + c + d + e + f)
expect(fn.length).toBe(6)
fn = fn(1)
expect(fn.length).toBe(5)
fn = fn(2)
expect(fn.length).toBe(4)
fn = fn(3)
expect(fn.length).toBe(3)
fn = fn(4)
expect(fn.length).toBe(2)
fn = fn(5)
expect(fn.length).toBe(1)
expect(
fn(6)
).toBe(21)
})
test('curry(not using __), the original arities are 7', () => {
let fn = curry((a, b, c, d, e, f, g) => a + b + c + d + e + f + g)
expect(fn.length).toBe(7)
fn = fn(1)
expect(fn.length).toBe(6)
fn = fn(2)
expect(fn.length).toBe(5)
fn = fn(3)
expect(fn.length).toBe(4)
fn = fn(4)
expect(fn.length).toBe(3)
fn = fn(5)
expect(fn.length).toBe(2)
fn = fn(6)
expect(fn.length).toBe(1)
expect(
fn(7)
).toBe(28)
})
test('curry(not using __), the original arities are 8', () => {
let fn = curry((a, b, c, d, e, f, g, h) => a + b + c + d + e + f + g + h)
expect(fn.length).toBe(8)
fn = fn(1)
expect(fn.length).toBe(7)
fn = fn(2)
expect(fn.length).toBe(6)
fn = fn(3)
expect(fn.length).toBe(5)
fn = fn(4)
expect(fn.length).toBe(4)
fn = fn(5)
expect(fn.length).toBe(3)
fn = fn(6)
expect(fn.length).toBe(2)
fn = fn(7)
expect(fn.length).toBe(1)
expect(
fn(8)
).toBe(36)
})
test('curry(not using __), the original arities are 9', () => {
let fn = curry((a, b, c, d, e, f, g, h, i) => a + b + c + d + e + f + g + h + i)
expect(fn.length).toBe(9)
fn = fn(1)
expect(fn.length).toBe(8)
fn = fn(2)
expect(fn.length).toBe(7)
fn = fn(3)
expect(fn.length).toBe(6)
fn = fn(4)
expect(fn.length).toBe(5)
fn = fn(5)
expect(fn.length).toBe(4)
fn = fn(6)
expect(fn.length).toBe(3)
fn = fn(7)
expect(fn.length).toBe(2)
fn = fn(8)
expect(fn.length).toBe(1)
expect(
fn(9)
).toBe(45)
})
test('curry(not using __), the original arities are 10', () => {
let fn = curry((a, b, c, d, e, f, g, h, i, j) => a + b + c + d + e + f + g + h + i + j)
expect(fn.length).toBe(10)
fn = fn(1)
expect(fn.length).toBe(9)
fn = fn(2)
expect(fn.length).toBe(8)
fn = fn(3)
expect(fn.length).toBe(7)
fn = fn(4)
expect(fn.length).toBe(6)
fn = fn(5)
expect(fn.length).toBe(5)
fn = fn(6)
expect(fn.length).toBe(4)
fn = fn(7)
expect(fn.length).toBe(3)
fn = fn(8)
expect(fn.length).toBe(2)
fn = fn(9)
expect(fn.length).toBe(1)
expect(
fn(10)
).toBe(55)
})
test('curry(not using __), the original arities are 11', () => {
let fn = curry((a, b, c, d, e, f, g, h, i, j, k) => a + b + c + d + e + f + g + h + i + j + k)
expect(fn.length).toBe(0)
fn = fn(1)
expect(fn.length).toBe(10)
fn = fn(2)
expect(fn.length).toBe(9)
fn = fn(3)
expect(fn.length).toBe(8)
fn = fn(4)
expect(fn.length).toBe(7)
fn = fn(5)
expect(fn.length).toBe(6)
fn = fn(6)
expect(fn.length).toBe(5)
fn = fn(7)
expect(fn.length).toBe(4)
fn = fn(8)
expect(fn.length).toBe(3)
fn = fn(9)
expect(fn.length).toBe(2)
fn = fn(10)
expect(fn.length).toBe(1)
expect(
fn(11)
).toBe(66)
})
test('curry(using __)', () => {
expect(
curry((x, y) => x + y)(__, 2)(1)
).toBe(3)
})