public void TestRecursionInvokationCompile()
        {
            Expression <Func <int, int> > adder = null;

            adder = i => adder.Compile()(i) + 1;

            Expression <Func <int> > doit = () => adder.Compile()(1);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as InvocationExpression);
        }
        public void TestExpressionInStaticVariable()
        {
            Expression<Func<int>> doit = () => gAdder.Invoke(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as MethodCallExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual(ExpressionType.Constant, r.NodeType, "node type of result");
            var ad = r as ConstantExpression;
            Assert.AreEqual(6, (ad as ConstantExpression).Value, "value");
        }
        public void TestRecursionInvokation()
        {
            Expression <Func <int, int> > adder = null;

            adder = i => adder.Invoke(i) + 1;

            Expression <Func <int> > doit = () => adder.Invoke(1);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as MethodCallExpression);
        }
        public void TestNestedArgExpressionCompile()
        {
            Expression <Func <int, int> > adder = i => i + 1;

            Expression <Func <int> > doit = () => adder.Compile()(adder.Compile()(2));
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as InvocationExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual("((2 + 1) + 1)", r.ToString(), "Expression result");
        }
        public void TestNestedArgExpression()
        {
            Expression <Func <int, int> > adder = i => i + 1;

            Expression <Func <int> > doit = () => adder.Invoke(adder.Invoke(2));
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as MethodCallExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual("4", r.ToString(), "Expression result");
        }
        public void TestNestedFunctionMixed2()
        {
            Expression <Func <int, int> > add1 = i => i + 1;
            Expression <Func <int, int> > add2 = i => add1.Compile()(i) + 2;

            Expression <Func <int> > doit = () => add2.Invoke(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as MethodCallExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual("8", r.ToString(), "Expression result");
        }
        public void TestSimpleExpressionWithComplexArgCompile()
        {
            Expression <Func <int, int> > add1 = i => i + 1;
            Expression <Func <int, int> > add2 = i => add1.Compile()(i + 3) + 2;

            Expression <Func <int> > doit = () => add2.Compile()(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as InvocationExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual("(((5 + 3) + 1) + 2)", r.ToString(), "Expression result");
        }
        public void TestSimpleExpressionWithComplexArg()
        {
            Expression <Func <int, int> > add1 = i => i + 1;
            Expression <Func <int, int> > add2 = i => add1.Invoke(i + 3) + 2;

            Expression <Func <int> > doit = () => add2.Invoke(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as MethodCallExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual("11", r.ToString(), "Expression result");
        }
        public void TestExpressionInStaticVariable()
        {
            Expression <Func <int> > doit = () => gAdder.Invoke(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as MethodCallExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual(ExpressionType.Constant, r.NodeType, "node type of result");
            var ad = r as ConstantExpression;

            Assert.AreEqual(6, (ad as ConstantExpression).Value, "value");
        }
        public void TestSimpleExpressionCompile()
        {
            Expression<Func<int, int>> adder = i => i + 1;

            Expression<Func<int>> doit = () => adder.Compile()(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as InvocationExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual(ExpressionType.Add, r.NodeType, "node type of result");
            var ad = r as BinaryExpression;
            Assert.AreEqual(5, (ad.Left as ConstantExpression).Value, "left value");
            Assert.AreEqual(1, (ad.Right as ConstantExpression).Value, "right value");
        }
        public void TestExpressionInFieldOfObject()
        {
            var t = new tempProp();

            int i = 5;
            Expression <Func <int> > doit = () => t.myAdderField.Invoke(i);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as MethodCallExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual(ExpressionType.Constant, r.NodeType, "node type of result");
            var ad = r as ConstantExpression;

            Assert.AreEqual(6, (ad as ConstantExpression).Value, "value");
        }
        public void TestSimpleExpressionCompile()
        {
            Expression <Func <int, int> > adder = i => i + 1;

            Expression <Func <int> > doit = () => adder.Compile()(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r      = target.Transform(expr as InvocationExpression);

            Assert.IsNotNull(r);
            Assert.AreEqual(ExpressionType.Add, r.NodeType, "node type of result");
            var ad = r as BinaryExpression;

            Assert.AreEqual(5, (ad.Left as ConstantExpression).Value, "left value");
            Assert.AreEqual(1, (ad.Right as ConstantExpression).Value, "right value");
        }
        public void TestRecursionInvokationCompile()
        {
            Expression<Func<int, int>> adder = null;
            adder = i => adder.Compile()(i) + 1;

            Expression<Func<int>> doit = () => adder.Compile()(1);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as InvocationExpression);
        }
        public void TestRecursionInvokation()
        {
            Expression<Func<int, int>> adder = null;
            adder = i => adder.Invoke(i) + 1;

            Expression<Func<int>> doit = () => adder.Invoke(1);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as MethodCallExpression);
        }
        public void TestNestedArgExpressionCompile()
        {
            Expression<Func<int, int>> adder = i => i + 1;

            Expression<Func<int>> doit = () => adder.Compile()(adder.Compile()(2));
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as InvocationExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual("((2 + 1) + 1)", r.ToString(), "Expression result");
        }
        public void TestNestedArgExpression()
        {
            Expression<Func<int, int>> adder = i => i + 1;

            Expression<Func<int>> doit = () => adder.Invoke(adder.Invoke(2));
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as MethodCallExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual("4", r.ToString(), "Expression result");
        }
        public void TestSimpleExpressionWithComplexArgCompile()
        {
            Expression<Func<int, int>> add1 = i => i + 1;
            Expression<Func<int, int>> add2 = i => add1.Compile()(i + 3) + 2;

            Expression<Func<int>> doit = () => add2.Compile()(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as InvocationExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual("(((5 + 3) + 1) + 2)", r.ToString(), "Expression result");
        }
        public void TestSimpleExpressionWithComplexArg()
        {
            Expression<Func<int, int>> add1 = i => i + 1;
            Expression<Func<int, int>> add2 = i => add1.Invoke(i + 3) + 2;

            Expression<Func<int>> doit = () => add2.Invoke(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as MethodCallExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual("11", r.ToString(), "Expression result");
        }
        public void TestExpressionInFieldOfObject()
        {
            var t = new tempProp();

            int i = 5;
            Expression<Func<int>> doit = () => t.myAdderField.Invoke(i);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as MethodCallExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual(ExpressionType.Constant, r.NodeType, "node type of result");
            var ad = r as ConstantExpression;
            Assert.AreEqual(6, (ad as ConstantExpression).Value, "value");
        }
        public void TestNestedFunctionMixed2()
        {
            Expression<Func<int, int>> add1 = i => i + 1;
            Expression<Func<int, int>> add2 = i => add1.Compile()(i) + 2;

            Expression<Func<int>> doit = () => add2.Invoke(5);
            var expr = doit.Body;

            var target = new ExpressionVariableInvokeExpressionTransformer();
            var r = target.Transform(expr as MethodCallExpression);
            Assert.IsNotNull(r);
            Assert.AreEqual("8", r.ToString(), "Expression result");
        }