public void Lambda1_CorrectlyCreatesLambdaExpression()
        {
            var constant = Expression.Constant(5);
            var body     = Expression.Lambda <Action>(constant);
            var expected = new TestExpression <Action>(body);

            var actual = TestExpression.Lambda((TestExpression)TestExpression.Const(5));

            AssertAreEqualExpressions(expected, actual);
        }
        public void Lambda4_CorrectlyCreatesLambdaExpression()
        {
            var constant  = Expression.Parameter(typeof(int), "variable");
            var parameter = Expression.Parameter(typeof(int), "parameter");
            var addition  = Expression.Add(parameter, constant);
            var body      = Expression.Lambda <Func <int, int> >(addition, parameter);
            var expected  = new TestExpression <Func <int, int> >(body);

            var variable = TestExpression.Var <int>("variable");
            var actual   = TestExpression.Lambda <int, int>(parameter => TestExpression.Expr(variable, b => parameter + b));

            AssertAreEqualExpressions(expected, actual);
        }
        public void Lambda5_CorrectlyCreatesLambdaExpression()
        {
            var constant   = Expression.Parameter(typeof(int), "variable");
            var parameter1 = Expression.Parameter(typeof(int), "parameter1");
            var parameter2 = Expression.Parameter(typeof(int), "parameter2");
            var addition1  = Expression.Add(parameter1, parameter2);
            var addition2  = Expression.Add(addition1, constant);
            var body       = Expression.Lambda <Action <int, int> >(addition2, parameter1, parameter2);
            var expected   = new TestExpression <Action <int, int> >(body);

            var variable = TestExpression.Var <int>("variable");
            var actual   = TestExpression.Lambda <int, int>((parameter1, parameter2) => (TestExpression)TestExpression.Expr(variable, b => parameter1 + parameter2 + b));

            AssertAreEqualExpressions(expected, actual);
        }