public void TestCurriedFunc1() { Func <int, int> func = a => a; var curried = func.Curried(); Assert.Equal(func, curried); }
public void TestCurriedFunc4() { Func <int, int, int, int, int> func = (arg1, arg2, arg3, arg4) => arg1 + arg2 + arg3 + arg4; var curried = func.Curried(); Assert.Equal(func(1, 2, 3, 4), curried(1)(2)(3)(4)); }
public void TestCurriedFunc0() { Func <int> func = () => 1; var curried = func.Curried(); Assert.Equal(func, curried); }
public void TestCurriedFunc3() { Func <int, int, int, int> func = (arg1, arg2, arg3) => arg1 + arg2 + arg3; var curried = func.Curried(); Assert.Equal(func(1, 2, 3), curried(1)(2)(3)); }
public void TestCurriedFunc2() { Func <int, int, int> func = (arg1, arg2) => arg1 + arg2; var curried = func.Curried(); Assert.Equal(func(1, 2), curried(1)(2)); }
public void TestCurriedFunc7() { Func <int, int, int, int, int, int, int, int> func = (arg1, arg2, arg3, arg4, arg5, arg6, arg7) => arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7; var curried = func.Curried(); Assert.Equal(func(1, 2, 3, 4, 5, 6, 7), curried(1)(2)(3)(4)(5)(6)(7)); }
public void TestCurriedFunc5() { Func <int, int, int, int, int, int> func = (arg1, arg2, arg3, arg4, arg5) => arg1 + arg2 + arg3 + arg4 + arg5; var curried = func.Curried(); Assert.Equal(func(1, 2, 3, 4, 5), curried(1)(2)(3)(4)(5)); }
public void TestCurriedFunc12() { Func <int, int, int, int, int, int, int, int, int, int, int, int, int> func = (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) => arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 + arg10 + arg11 + arg12; var curried = func.Curried(); Assert.Equal(func(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), curried(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)); }
public void TestCurriedFunc9() { Func <int, int, int, int, int, int, int, int, int, int> func = (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) => arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9; var curried = func.Curried(); Assert.Equal(func(1, 2, 3, 4, 5, 6, 7, 8, 9), curried(1)(2)(3)(4)(5)(6)(7)(8)(9)); }
public void TestCurried() { var f2 = new Func<int, int, int>((i1, i2) => i1 + i2); Assert.That(f2.Curried().Uncurried()(1, 1), Is.EqualTo(2)); Assert.That(Func.Uncurry(Func.Curry(f2))(1, 1), Is.EqualTo(2)); var f3 = new Func<int, int, int, int>((i1, i2, i3) => i1 + i2 + i3); Assert.That(f3.Curried().Uncurried()(1, 1, 1), Is.EqualTo(3)); Assert.That(Func.Uncurry(Func.Curry(f3))(1, 1, 1), Is.EqualTo(3)); var f4 = new Func<int, int, int, int, int>((i1, i2, i3, i4) => i1 + i2 + i3 + i4); Assert.That(f4.Curried().Uncurried()(1, 1, 1, 1), Is.EqualTo(4)); Assert.That(Func.Uncurry(Func.Curry(f4))(1, 1, 1, 1), Is.EqualTo(4)); var f5 = new Func<int, int, int, int, int, int>((i1, i2, i3, i4, i5) => i1 + i2 + i3 + i4 + i5); Assert.That(f5.Curried().Uncurried()(1, 1, 1, 1, 1), Is.EqualTo(5)); Assert.That(Func.Uncurry(Func.Curry(f5))(1, 1, 1, 1, 1), Is.EqualTo(5)); var f6 = new Func<int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6) => i1 + i2 + i3 + i4 + i5 + i6); Assert.That(f6.Curried().Uncurried()(1, 1, 1, 1, 1, 1), Is.EqualTo(6)); Assert.That(Func.Uncurry(Func.Curry(f6))(1, 1, 1, 1, 1, 1), Is.EqualTo(6)); var f7 = new Func<int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7) => i1 + i2 + i3 + i4 + i5 + i6 + i7); Assert.That(f7.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1), Is.EqualTo(7)); Assert.That(Func.Uncurry(Func.Curry(f7))(1, 1, 1, 1, 1, 1, 1), Is.EqualTo(7)); var f8 = new Func<int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8); Assert.That(f8.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(8)); Assert.That(Func.Uncurry(Func.Curry(f8))(1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(8)); var f9 = new Func<int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9); Assert.That(f9.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(9)); Assert.That(Func.Uncurry(Func.Curry(f9))(1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(9)); var f10 = new Func<int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10); Assert.That(f10.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(10)); Assert.That(Func.Uncurry(Func.Curry(f10))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(10)); var f11 = new Func<int, int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11); Assert.That(f11.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(11)); Assert.That(Func.Uncurry(Func.Curry(f11))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(11)); var f12 = new Func<int, int, int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12); Assert.That(f12.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(12)); Assert.That(Func.Uncurry(Func.Curry(f12))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(12)); var f13 = new Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13); Assert.That(f13.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(13)); Assert.That(Func.Uncurry(Func.Curry(f13))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(13)); var f14 = new Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14); Assert.That(f14.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(14)); Assert.That(Func.Uncurry(Func.Curry(f14))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(14)); var f15 = new Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15); Assert.That(f15.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(15)); Assert.That(Func.Uncurry(Func.Curry(f15))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(15)); var f16 = new Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16) => i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15 + i16); Assert.That(f16.Curried().Uncurried()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(16)); Assert.That(Func.Uncurry(Func.Curry(f16))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(16)); }
/// <summary> /// Lift a function to an applicative context for either /// </summary> public static Either <left, outˈ> Lift <left, inA, inB, outˈ>(this Func <inA, inB, outˈ> f, Either <left, inA> a, Either <left, inB> b) => f.Curried().PureEither().With <left>().Ap(a).Ap(b);
public void TestCurriedFunc16Null() { Func <int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int> func = null; Assert.Throws <ArgumentNullException>(() => func.Curried()); }