public void ClassicCpsRewriter_Action4() { var cps = new ClassicCpsRewriter(); var f = (Expression <Action <int, int, int> >)((x, y, z) => Actions.Foo(x, y, z)); var g = cps.Rewrite(f); var res = default(int); g.Compile()(1, 2, 3, () => res = Actions.Foo3); Assert.AreEqual(6, res); }
public void ClassicCpsRewriter_Action1() { var cps = new ClassicCpsRewriter(); var f = (Expression <Action>)(() => Actions.Foo()); var g = cps.Rewrite(f); var res = default(int); g.Compile()(() => res = Actions.Foo0); Assert.AreEqual(0, res); }
public void ClassicCpsRewriter_Action2() { var cps = new ClassicCpsRewriter(); var f = (Expression <Action <int> >)(x => Actions.Foo(x)); var g = cps.Rewrite(f); var res = default(int); g.Compile()(1, () => res = Actions.Foo1); Assert.AreEqual(1, res); }
public void ClassicCpsRewriter_Action5() { var cps = new ClassicCpsRewriter(); var f = (Expression <Action>)(() => Actions.Foo()); var res = default(int); var set = (Action <int>)(x => res = x); var c = (Expression <Action>)(() => set(Actions.Foo0)); var g = Expression.Lambda <Action>(cps.Rewrite(f, c)); g.Compile()(); Assert.AreEqual(0, res); }
public void ClassicCpsRewriter_ArgumentChecking() { var cps = new ClassicCpsRewriter(); var e1 = Expression.Constant(42); var f1 = (Expression <Func <int> >)(() => 42); var c1 = (Expression <Action <int> >)(x => Console.WriteLine(x)); var f2 = (Expression <Action>)(() => Console.WriteLine("bar")); var c2 = (Expression <Action>)(() => Console.WriteLine("foo")); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(default(Expression)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(default(LambdaExpression)), ex => Assert.AreEqual("expression", ex.ParamName)); #pragma warning disable IDE0034 // Simplify 'default' expression (illustrative of method signature) AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int>(default(Expression <Func <int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int, int>(default(Expression <Func <int, int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int, int, int>(default(Expression <Func <int, int, int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int, int, int, int>(default(Expression <Func <int, int, int, int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(default(Expression <Action>)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int>(default(Expression <Action <int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int, int>(default(Expression <Action <int, int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int, int, int>(default(Expression <Action <int, int, int> >)), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(default(Expression <Action>), c2), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(f2, default(Expression <Action>)), ex => Assert.AreEqual("continuation", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int>(default(Expression <Func <int> >), c1), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite <int>(f1, default(Expression <Action <int> >)), ex => Assert.AreEqual("continuation", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(default(Expression), e1), ex => Assert.AreEqual("expression", ex.ParamName)); AssertEx.ThrowsException <ArgumentNullException>(() => cps.Rewrite(e1, default(Expression)), ex => Assert.AreEqual("continuation", ex.ParamName)); #pragma warning restore IDE0034 // Simplify 'default' expression }