@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateLikePredicate() {
    // Given:
    final Expression expression1 = new LikePredicate(
        new StringLiteral("catdog"), new StringLiteral("ca%og"), Optional.empty()
    );
    final Expression expression2 = new LikePredicate(
        new StringLiteral("cat%og"), new StringLiteral("cat\\%og"), Optional.empty()
    );
    final Expression expression3 = new LikePredicate(
        new StringLiteral("cat%og"), new StringLiteral("cat\\%og"), Optional.of('\\')
    );


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

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