public void Issue_25_Nested_Lambda_Swapped_Parameters()
        {
            Expression <Func <int, int, Func <int> > > x = (a1, a2) => () => a1;
            Expression <Func <int, int, Func <int> > > y = (a1, a2) => () => a2;

            AssertExpressions.NotEqual(x, y);
        }
        public void Issue_27_EqualityComparer_Ignored_Lambda_Body_Evaluation()
        {
            var target = new ExpressionEqualityComparer(UnknownExpression.EqualityComparer);
            var x      = Expression.Lambda(StubExpression.Unknown(3));
            var y      = Expression.Lambda(StubExpression.Unknown(3));

            AssertExpressions.Equal(x, y, target);
        }
        public void Issue_12_Equals_ListInit()
        {
            // Expressions similar to this code `new List<int> { 0|1 }`
            var x = Expression.ListInit(Expression.New(typeof(List <int>)), Expression.Constant(0));
            var y = Expression.ListInit(Expression.New(typeof(List <int>)), Expression.Constant(1));

            AssertExpressions.NotEqual(x, y);
        }
        public void Issue_4_Catch_Without_Variable()
        {
            // Expression similar to this code `try { } catch (Exception) { }`
            // Same expression twice to evade reference equality check
            var x = Expression.TryCatch(Expression.Empty(), Expression.Catch(typeof(Exception), Expression.Empty()));
            var y = Expression.TryCatch(Expression.Empty(), Expression.Catch(typeof(Exception), Expression.Empty()));

            AssertExpressions.Equal(x, y);
        }
        public void Issue_20_Equals_Block_Swapped_Labels()
        {
            var returnX = Expression.Label();
            var labelX  = Expression.Label();
            var x       = Expression.Block(
                Expression.Label(labelX),
                Expression.Goto(returnX),
                Expression.Label(returnX)
                );

            var returnY = Expression.Label();
            var labelY  = Expression.Label();
            var y       = Expression.Block(
                Expression.Label(labelY),
                Expression.Goto(labelY),
                Expression.Label(returnY)
                );

            AssertExpressions.NotEqual(x, y);
        }
        public void Issue_21_Equals_Block_Swapped_Variables()
        {
            var var1X = Expression.Variable(typeof(int));
            var var2X = Expression.Variable(typeof(int));
            var x     = Expression.Block(
                new[] { var1X, var2X },
                var1X,
                var2X
                );

            var var1Y = Expression.Variable(typeof(int));
            var var2Y = Expression.Variable(typeof(int));
            var y     = Expression.Block(
                new[] { var1Y, var2Y },
                var2Y,
                var1Y
                );

            AssertExpressions.NotEqual(x, y);
        }