private <T> T accept(Expression<T> expr) {
        return expr.accept(this);
    }
@Test
    public void testNot() throws Exception {
        final Expr.Greater trueExpr = Expr.Greater.create(Expr.NumberValue.create(2), Expr.NumberValue.create(1));
        final Expr.Greater falseExpr = Expr.Greater.create(Expr.NumberValue.create(1), Expr.NumberValue.create(2));

        assertThat(Expr.Not.create(falseExpr).accept(new BooleanNumberConditionsVisitor()))
                .isTrue();

        assertThat(Expr.Not.create(trueExpr).accept(new BooleanNumberConditionsVisitor()))
                .isFalse();

        assertThat(loadCondition("condition-not.json").accept(new BooleanNumberConditionsVisitor()))
                .isTrue();
    }