[Test] public void Not_Function() { Functional.UnaryFunction <int, bool> func1 = Functional.Not1(Functional.Bind1st <int, bool>(Functional.LessThan <int>, 29)); Assert.IsTrue(func1(12)); // !(29 < 12) == false; Assert.IsFalse(func1(30)); // !(29 < 30) == true; Assert.IsTrue(func1(29)); // !(29 < 29) == false; Functional.BinaryFunction <int, int, bool> func2 = Functional.Not2 <int, int>(Functional.LessThan <int>); Assert.IsFalse(func2(12, 29)); // !(29 < 12) == false; Assert.IsTrue(func2(30, 29)); // !(29 < 30) == true; Assert.IsTrue(func2(29, 29)); // !(29 < 29) == false; }
[Test] public void Bind_ThreeTypes() { Functional.UnaryFunction <string, double> func1 = Functional.Bind1st <int, string, double>(Mux, 3); double result = func1("2"); Assert.AreEqual(9, result); Assert.AreEqual(3, lastLhs); Assert.AreEqual("2", lastRhs); Functional.UnaryFunction <int, double> func2 = Functional.Bind2nd <int, string, double>(Mux, "3"); result = func2(2); Assert.AreEqual(8, result); Assert.AreEqual(2, lastLhs); Assert.AreEqual("3", lastRhs); }
[Test] public void Bind_TwoTypes() { Functional.UnaryFunction <int, double> func1 = Functional.Bind1st <int, double>(Exp, 3); double result = func1(2); Assert.AreEqual(9, result); Assert.AreEqual(3, lastLhs); Assert.AreEqual(2, lastRhs); Functional.UnaryFunction <int, double> func2 = Functional.Bind2nd <int, double>(Exp, 3); result = func2(2); Assert.AreEqual(8, result); Assert.AreEqual(2, lastLhs); Assert.AreEqual(3, lastRhs); }
[Test] public void Bind_SameTypes() { Functional.UnaryFunction <int, int> func1 = Functional.Bind1st(AddEm, 10); int result = func1(12); Assert.AreEqual(22, result); Assert.AreEqual(10, lastLhs); Assert.AreEqual(12, lastRhs); Functional.UnaryFunction <int, int> func2 = Functional.Bind2nd(AddEm, 10); result = func2(12); Assert.AreEqual(22, result); Assert.AreEqual(12, lastLhs); Assert.AreEqual(10, lastRhs); }
public static OutputIterator <O> Transform <I, O>(IEnumerable <I> enumerable, OutputIterator <O> dest, Functional.UnaryFunction <I, O> func) { IEnumerator <I> enumerator = enumerable.GetEnumerator(); for (dest = IteratorUtil.Clone(dest); enumerator.MoveNext(); dest.MoveNext()) { dest.Write(func(enumerator.Current)); } return(dest); }
public static OutputIterator <O> Transform <I, O>(InputIterator <I> begin, InputIterator <I> end, OutputIterator <O> dest, Functional.UnaryFunction <I, O> func) { for (begin = IteratorUtil.Clone(begin), dest = IteratorUtil.Clone(dest); !begin.Equals(end); begin.MoveNext(), dest.MoveNext()) { dest.Write(func(begin.Read())); } return(dest); }