@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateSubscriptExpression() {
    // Given:
    final Expression expression1 = new SubscriptExpression(
        new CreateArrayExpression(ImmutableList.of(
            new StringLiteral("1"), new StringLiteral("2"))),
        new IntegerLiteral(1)
    );
    final Expression expression2 = new SubscriptExpression(
        new CreateMapExpression(ImmutableMap.of(
            new StringLiteral("a"), new LongLiteral(123),
            new StringLiteral("b"), new LongLiteral(456))),
        new StringLiteral("a")
    );

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

    // Then:
    assertThat(interpreter1.evaluate(ROW), is("1"));
    assertThat(interpreter2.evaluate(ROW), is(123L));
  }