@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateCastToDecimal() {
    // Given:
    final Expression cast1 = new Cast(
        new LongLiteral(10L),
        new Type(SqlTypes.decimal(10, 1))
    );
    final Expression cast2 = new Cast(
        new StringLiteral("1234.5"),
        new Type(SqlTypes.decimal(10, 1))
    );
    final Expression cast3 = new Cast(
        new IntegerLiteral(12),
        new Type(SqlTypes.decimal(10, 1))
    );
    final Expression cast4 = new Cast(
        new DoubleLiteral(4567.5),
        new Type(SqlTypes.decimal(10, 1))
    );

    // When:
    InterpretedExpression interpreter1 = interpreter(cast1);
    InterpretedExpression interpreter2 = interpreter(cast2);
    InterpretedExpression interpreter3 = interpreter(cast3);
    InterpretedExpression interpreter4 = interpreter(cast4);

    // Then:
    assertThat(interpreter1.evaluate(ROW), is(BigDecimal.valueOf(10L).setScale(1)));
    assertThat(interpreter2.evaluate(ROW), is(BigDecimal.valueOf(1234.5d).setScale(1)));
    assertThat(interpreter3.evaluate(ROW), is(BigDecimal.valueOf(12).setScale(1)));
    assertThat(interpreter4.evaluate(ROW), is(BigDecimal.valueOf(4567.5d).setScale(1)));
  }