|
| 1 | +// Copyright 2021-present the Fonction authors. All rights reserved. MIT license. |
| 2 | +import { assertEquals } from '../dev_deps.ts' |
| 3 | +import { curry } from '../src/curry.ts' |
| 4 | +import { assertEqual } from './asserts.ts' |
| 5 | +const arity0 = () => true |
| 6 | +const arity1 = (a: unknown) => a |
| 7 | +const arity2 = (a: unknown, b: unknown) => [a, b] |
| 8 | +const arity3 = (a: unknown, b: unknown, c: unknown) => [a, b, c] |
| 9 | +const arity4 = (a: unknown, b: unknown, c: unknown, d: unknown) => [a, b, c, d] |
| 10 | +const arity5 = (a: unknown, b: unknown, c: unknown, d: unknown, e: unknown) => [ |
| 11 | + a, |
| 12 | + b, |
| 13 | + c, |
| 14 | + d, |
| 15 | + e |
| 16 | +] |
| 17 | + |
| 18 | +Deno.test('curry', () => { |
| 19 | + const add = curry((a: number, b: number) => a + b) |
| 20 | + assertEquals(add(1, 2), 3) |
| 21 | + assertEquals(add(1)(2), 3) |
| 22 | + |
| 23 | + assertEquals(curry(arity0)(), true) |
| 24 | + assertEquals(curry(arity1)(''), '') |
| 25 | + assertEquals(typeof curry(arity2)(''), 'function') |
| 26 | + assertEquals(curry(arity2)('', 1), ['', 1]) |
| 27 | + assertEquals(curry(arity2)('')(1), ['', 1]) |
| 28 | + |
| 29 | + assertEquals(typeof curry(arity3)(''), 'function') |
| 30 | + assertEquals(typeof curry(arity3)('')(1), 'function') |
| 31 | + assertEquals(curry(arity3)('')(1)(false), ['', 1, false]) |
| 32 | + assertEquals(curry(arity3)('', 1)(false), ['', 1, false]) |
| 33 | + assertEquals(curry(arity3)('', 1, false), ['', 1, false]) |
| 34 | + |
| 35 | + assertEquals(curry(arity4)('')(1)(false)(true), ['', 1, false, true]) |
| 36 | + assertEquals(curry(arity4)('', 1)(false)(true), ['', 1, false, true]) |
| 37 | + assertEquals(curry(arity4)('', 1, false)(true), ['', 1, false, true]) |
| 38 | + assertEquals(curry(arity4)('', 1, false, true), ['', 1, false, true]) |
| 39 | + |
| 40 | + assertEquals(curry(arity5)('')(1)(false)(true)(0n), ['', 1, false, true, 0n]) |
| 41 | + assertEquals(curry(arity5)('', 1)(false)(true)(0n), ['', 1, false, true, 0n]) |
| 42 | + assertEquals(curry(arity5)('', 1, false)(true)(0n), ['', 1, false, true, 0n]) |
| 43 | + assertEquals(curry(arity5)('', 1, false, true)(0n), ['', 1, false, true, 0n]) |
| 44 | + assertEquals(curry(arity5)('', 1, false, true, 0n), ['', 1, false, true, 0n]) |
| 45 | + assertEquals(curry(arity5)('')(1, false, true, 0n), ['', 1, false, true, 0n]) |
| 46 | + assertEquals(curry(arity5)('')(1)(false, true, 0n), ['', 1, false, true, 0n]) |
| 47 | + assertEquals(curry(arity5)('')(1)(false)(true, 0n), ['', 1, false, true, 0n]) |
| 48 | + |
| 49 | + assertEqual<() => boolean>(curry(arity0)) |
| 50 | + assertEqual<unknown>(curry(arity1)('')) |
| 51 | + assertEqual<unknown[]>(curry(arity2)('')('')) |
| 52 | + assertEqual<unknown[]>(curry(arity2)('', '')) |
| 53 | + assertEqual<unknown[]>(curry(arity3)('', '', '')) |
| 54 | + assertEqual<unknown[]>(curry(arity3)('', '', '')) |
| 55 | + assertEqual<unknown[]>(curry(arity3)('')('')('')) |
| 56 | + assertEqual<unknown[]>( |
| 57 | + curry(arityMax)( |
| 58 | + '', |
| 59 | + '', |
| 60 | + '', |
| 61 | + '', |
| 62 | + '', |
| 63 | + '', |
| 64 | + '', |
| 65 | + '', |
| 66 | + '', |
| 67 | + '', |
| 68 | + '', |
| 69 | + '', |
| 70 | + '', |
| 71 | + '', |
| 72 | + '', |
| 73 | + '', |
| 74 | + '' |
| 75 | + ) |
| 76 | + ) |
| 77 | +}) |
| 78 | + |
| 79 | +const arityMax = ( |
| 80 | + a: unknown, |
| 81 | + b: unknown, |
| 82 | + c: unknown, |
| 83 | + d: unknown, |
| 84 | + e: unknown, |
| 85 | + f: unknown, |
| 86 | + g: unknown, |
| 87 | + h: unknown, |
| 88 | + i: unknown, |
| 89 | + j: unknown, |
| 90 | + k: unknown, |
| 91 | + l: unknown, |
| 92 | + m: unknown, |
| 93 | + n: unknown, |
| 94 | + o: unknown, |
| 95 | + p: unknown, |
| 96 | + q: unknown |
| 97 | +) => [a, b, c, d, e] |
0 commit comments