public void Tupled_AndThen_Play() { Func <int, int, int> adder = (a, b) => a + b; var fn1 = new Func <int, int, int>(Adder.Add) .Tupled() .AndThen((x) => x * 10); var fn2 = adder.Tupled().AndThen((x) => x * 10); Assert.Equal(150, fn1((5, 10))); Assert.Equal(150, fn2((10, 5))); }
public void TestTupled() { var f2 = new Func<int, int, int>((i1, i2) => i1 + i2); Assert.That(f2.Tupled().Untupled()(1, 1), Is.EqualTo(2)); Assert.That(Func.Untuple(Func.Tuple(f2))(1, 1), Is.EqualTo(2)); var f3 = new Func<int, int, int, int>((i1, i2, i3) => i1 + i2 + i3); Assert.That(f3.Tupled().Untupled()(1, 1, 1), Is.EqualTo(3)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1), Is.EqualTo(4)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1), Is.EqualTo(5)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1), Is.EqualTo(6)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1), Is.EqualTo(7)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(8)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(9)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(10)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(11)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(12)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(13)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(14)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(15)); Assert.That(Func.Untuple(Func.Tuple(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.Tupled().Untupled()(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(16)); Assert.That(Func.Untuple(Func.Tuple(f16))(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Is.EqualTo(16)); }