@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateComparisons_time() {
    // Given:
    final Expression expression1 = new ComparisonExpression(
        ComparisonExpression.Type.GREATER_THAN,
        TIMESTAMPCOL,
        new TimestampLiteral(new Timestamp(1000))
    );
    final Expression expression2 = new ComparisonExpression(
        ComparisonExpression.Type.LESS_THAN,
        TIMESTAMPCOL,
        new StringLiteral("2017-11-13T23:59:58")
    );
    final Expression expression3 = new ComparisonExpression(
        ComparisonExpression.Type.EQUAL,
        TIMESTAMPCOL,
        new DateLiteral(new Date(864000000))
    );
    final Expression expression4 = new ComparisonExpression(
        ComparisonExpression.Type.NOT_EQUAL,
        TIMECOL,
        new TimeLiteral(new Time(1000))
    );
    final Expression expression5 = new ComparisonExpression(
        ComparisonExpression.Type.LESS_THAN_OR_EQUAL,
        TIMECOL,
        new StringLiteral("00:01:32")
    );
    final Expression expression6 = new ComparisonExpression(
        ComparisonExpression.Type.GREATER_THAN_OR_EQUAL,
        DATECOL,
        new StringLiteral("1970-01-20")
    );
    final Expression expression7 = new ComparisonExpression(
        ComparisonExpression.Type.GREATER_THAN_OR_EQUAL,
        DATECOL,
        new DateLiteral(new Date(864000000))
    );
    final Expression expression8 = new ComparisonExpression(
        ComparisonExpression.Type.EQUAL,
        DATECOL,
        new TimestampLiteral(new Timestamp(864000005))
    );

    // When:
    InterpretedExpression interpreter1 = interpreter(expression1);
    InterpretedExpression interpreter2 = interpreter(expression2);
    InterpretedExpression interpreter3 = interpreter(expression3);
    InterpretedExpression interpreter4 = interpreter(expression4);
    InterpretedExpression interpreter5 = interpreter(expression5);
    InterpretedExpression interpreter6 = interpreter(expression6);
    InterpretedExpression interpreter7 = interpreter(expression7);
    InterpretedExpression interpreter8 = interpreter(expression8);

    // Then:
    assertThat(interpreter1.evaluate(make(10, new Timestamp(1001))), is(true));
    assertThat(interpreter2.evaluate(make(10, new Timestamp(151061759799L))), is(true));
    assertThat(interpreter3.evaluate(make(10, new Timestamp(864000000))), is(true));
    assertThat(interpreter4.evaluate(make(12, new Time(1000))), is(false));
    assertThat(interpreter5.evaluate(make(12, new Time(4))), is(true));
    assertThat(interpreter6.evaluate(make(13, new Date(86400000))), is(false));
    assertThat(interpreter7.evaluate(make(13, new Date(864000000))), is(true));
    assertThat(interpreter8.evaluate(make(13, new Date(864000000))), is(false));
  }