@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateBetween() {
    // Given:
    final Expression expression1 = new BetweenPredicate(
        new IntegerLiteral(4), new IntegerLiteral(3), new IntegerLiteral(8)
    );
    final Expression expression2 = new BetweenPredicate(
        new IntegerLiteral(0), new IntegerLiteral(3), new IntegerLiteral(8)
    );
    final Expression expression3 = new BetweenPredicate(
        new StringLiteral("b"), new StringLiteral("a"), new StringLiteral("c")
    );
    final Expression expression4 = new BetweenPredicate(
        new StringLiteral("z"), new StringLiteral("a"), new StringLiteral("c")
    );

    // When:
    InterpretedExpression interpreter1 = interpreter(expression1);
    InterpretedExpression interpreter2 = interpreter(expression2);
    InterpretedExpression interpreter3 = interpreter(expression3);
    InterpretedExpression interpreter4 = interpreter(expression4);

    // Then:
    assertThat(interpreter1.evaluate(ROW), is(true));
    assertThat(interpreter2.evaluate(ROW), is(false));
    assertThat(interpreter3.evaluate(ROW), is(true));
    assertThat(interpreter4.evaluate(ROW), is(false));
  }