public void GivenAMultiaryExpressionWithASingleElement_WhenFlattened_RemovesTheMultiary()
        {
            MultiaryExpression inputExpression   = Expression.And(Expression.Equals(FieldName.Number, null, 1));
            Expression         visitedExpression = inputExpression.AcceptVisitor(FlatteningRewriter.Instance);

            Assert.Equal("(FieldEqual Number 1)", visitedExpression.ToString());
        }
        public void GivenAnOrExpressionWithAnAndChild_WhenFlattened_RemainsTheSame()
        {
            MultiaryExpression inputExpression =
                Expression.Or(
                    Expression.And(Expression.GreaterThan(FieldName.Number, null, 1), Expression.LessThan(FieldName.Number, null, 5)),
                    Expression.And(Expression.GreaterThan(FieldName.Quantity, null, 1), Expression.LessThan(FieldName.Quantity, null, 5)));

            Expression visitedExpression = inputExpression.AcceptVisitor(FlatteningRewriter.Instance);

            Assert.Equal("(Or (And (FieldGreaterThan Number 1) (FieldLessThan Number 5)) (And (FieldGreaterThan Quantity 1) (FieldLessThan Quantity 5)))", visitedExpression.ToString());
        }
        public void GivenTwoLayersOfOrExpressions_WhenFlattened_CombinesToOneOrExpression()
        {
            MultiaryExpression inputExpression =
                Expression.Or(
                    Expression.Or(Expression.GreaterThan(FieldName.Number, null, 1), Expression.LessThan(FieldName.Number, null, 5)),
                    Expression.Or(Expression.GreaterThan(FieldName.Quantity, null, 1), Expression.LessThan(FieldName.Quantity, null, 5)));

            Expression visitedExpression = inputExpression.AcceptVisitor(FlatteningRewriter.Instance);

            Assert.Equal("(Or (FieldGreaterThan Number 1) (FieldLessThan Number 5) (FieldGreaterThan Quantity 1) (FieldLessThan Quantity 5))", visitedExpression.ToString());
        }