@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateInPredicate() {
    // Given:
    final Expression in1 = new InPredicate(
        COL7,
        new InListExpression(ImmutableList.of(
            new IntegerLiteral(4),
            new IntegerLiteral(6),
            new IntegerLiteral(8)
        ))
    );
    final Expression in2 = new InPredicate(
        COL1,
        new InListExpression(ImmutableList.of(
            new StringLiteral("a"),
            new StringLiteral("b"),
            new StringLiteral("c")
        ))
    );

    // When:
    InterpretedExpression interpreter1 = interpreter(in1);
    InterpretedExpression interpreter2 = interpreter(in2);

    // Then:
    assertThat(interpreter1.evaluate(make(7, 1)), is(false));
    assertThat(interpreter1.evaluate(make(7, 6)), is(true));
    assertThat(interpreter1.evaluate(make(7, 8)), is(true));
    assertThat(interpreter1.evaluate(make(7, 10)), is(false));

    assertThat(interpreter2.evaluate(make(1, "z")), is(false));
    assertThat(interpreter2.evaluate(make(1, "a")), is(true));
    assertThat(interpreter2.evaluate(make(1, "c")), is(true));
  }