Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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
        }