@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateCastToMap() {
    // Given:
    final Expression cast1 = new Cast(
        new CreateMapExpression(ImmutableMap.of(
            new StringLiteral("1"), new StringLiteral("2"),
            new StringLiteral("3"), new StringLiteral("4"))),
        new Type(SqlTypes.map(SqlTypes.INTEGER, SqlTypes.INTEGER))
    );
    final Expression cast2 = new Cast(
        new CreateMapExpression(ImmutableMap.of(
            new DoubleLiteral(2.5), new StringLiteral("2"),
            new DoubleLiteral(3.5), new StringLiteral("4"))),
        new Type(SqlTypes.map(SqlTypes.STRING, SqlTypes.BIGINT))
    );

    // When:
    InterpretedExpression interpreter1 = interpreter(cast1);
    InterpretedExpression interpreter2 = interpreter(cast2);

    // Then:
    assertThat(interpreter1.evaluate(ROW), is(ImmutableMap.of(1, 2, 3, 4)));
    assertThat(interpreter2.evaluate(ROW), is(ImmutableMap.of("2.5", 2L, "3.5", 4L)));
  }