public void TestThen() { ContinuousMap <int, int> c = ((ContinuousMap <int, int>)TimesTwo).Then(x => (x + 1)); Assert.NotNull(c); Assert.Equal(expected: 15, actual: c.GetValueAt(7)); }
public void TestCompose() { ContinuousMap <int, int> c = ((ContinuousMap <int, int>)TimesTwo).Compose((int x) => x + 1); Assert.NotNull(c); Assert.Equal(16, c.GetValueAt(7)); }
public void TestCasts() { // C# can't go straight from the function to a ContinuousMap, because technically it's already a cast to // become a Func (or any delegate type), double implicit casts are not considered when looking for // conversion operators, and there's no way to specify "method set" as the source for an implicit cast. // Oh well. Still, if we explicitly cast to Func, our conversion works: ContinuousMap <int, int> c = (Func <int, int>)TimesTwo; Assert.NotNull(c); Assert.Equal(10, c.GetValueAt(5)); Assert.IsAssignableFrom <FunctionBackedContinuousMap <int, int> >(c); Assert.Equal(4, ((FunctionBackedContinuousMap <int, int>)c).F(2)); FunctionBackedContinuousMap <int, int> d = (Func <int, int>)TimesTwo; Assert.NotNull(d); Assert.Equal(10, d.GetValueAt(5)); Assert.Equal(4, d.F(2)); Assert.IsAssignableFrom <ContinuousMap <int, int> >(d); var e = (ContinuousMap <int, int>)TimesTwo; Assert.NotNull(e); Assert.Equal(10, e.GetValueAt(5)); Assert.IsAssignableFrom <FunctionBackedContinuousMap <int, int> >(e); Assert.Equal(4, ((FunctionBackedContinuousMap <int, int>)e).F(2)); }