From 932da9f7d5863e0ff0a4d3a6073522c1fd93c5b5 Mon Sep 17 00:00:00 2001 From: Andy Brown Date: Fri, 21 Aug 2015 09:09:18 -0700 Subject: [PATCH] report correct arity for curried functions fixes #31 --- lib/util/curry.js | 8 ++++---- test/util/curry-spec.js | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/util/curry.js b/lib/util/curry.js index 036a66d..2f9157c 100644 --- a/lib/util/curry.js +++ b/lib/util/curry.js @@ -13,7 +13,7 @@ function countArguments(args, max) { } export function curry1(fn) { - return function curried(a, b, c) { + return function curried(a, ...[b, c]) { const n = countArguments(arguments); if (n >= 1) return fn(a, b, c); @@ -22,7 +22,7 @@ export function curry1(fn) { } export function curry2(fn) { - return function curried(a, b, c, d) { + return function curried(a, b, ...[c, d]) { const n = countArguments(arguments, 2); if (b === _ || c === _ || d === _) { @@ -40,7 +40,7 @@ export function curry2(fn) { } export function curry3(fn) { - return function curried(a, b, c, d, e) { + return function curried(a, b, c, ...[d, e]) { const n = countArguments(arguments, 3); if (c === _ || d === _ || e === _) { @@ -68,7 +68,7 @@ export function curry3(fn) { } export function curry4(fn) { - return function curried(a, b, c, d, e, f) { + return function curried(a, b, c, d, ...[e, f]) { const n = countArguments(arguments, 4); if (d === _ || e === _ || f === _) { diff --git a/test/util/curry-spec.js b/test/util/curry-spec.js index 69b66c8..f43f03d 100644 --- a/test/util/curry-spec.js +++ b/test/util/curry-spec.js @@ -12,6 +12,11 @@ describe('curry1', () => { const curried = curry1((a, b, c) => [a, b, c]); expect(curried(1, 2, 3, 4)).to.eql([1, 2, 3]); }); + + it('returns a fn with arity of 1', () => { + const curried = curry1((a, b, c) => [a, b, c]); + expect(curried).to.have.length(1); + }); }); describe('curry2', () => { @@ -31,6 +36,11 @@ describe('curry2', () => { const curried = curry2((a, b, c, d) => [a, b, c, d]); expect(curried(_, 2)(1, 3, 4)).to.eql([1, 2, 3, 4]); }); + + it('returns a fn with arity of 2', () => { + const curried = curry2((a, b, c, d) => [a, b, c, d]); + expect(curried).to.have.length(2); + }); }); describe('curry3', () => { @@ -53,6 +63,11 @@ describe('curry3', () => { expect(curried(_, 2, 3)('c', 4, 5)).to.eql(['c', 2, 3, 4, 5]); expect(curried(_, _, 3)('d', 2, 4, 5)).to.eql(['d', 2, 3, 4, 5]); }); + + it('returns a fn with arity of 3', () => { + const curried = curry3((a, b, c, d, e) => [a, b, c, d, e]); + expect(curried).to.have.length(3); + }); }); describe('curry4', () => { @@ -87,4 +102,9 @@ describe('curry4', () => { expect(curried(_, _, _, 4)('k', 2, 3, 5, 6)).to.eql(['k', 2, 3, 4, 5, 6]); }); + + it('returns a fn with arity of 4', () => { + const curried = curry4((a, b, c, d, e, f) => [a, b, c, d, e, f]); + expect(curried).to.have.length(4); + }); });