@VisibleForTesting
  Object evaluate(final GenericRow row) {
    return term.getValue(new TermEvaluationContext(row));
  }
@Test
  public void shouldEvaluateUnaryArithmetic() {
    // Given:
    final Expression expression1 = new ArithmeticUnaryExpression(
        Optional.empty(), Sign.PLUS, new IntegerLiteral(1)
    );
    final Expression expression2 = new ArithmeticUnaryExpression(
        Optional.empty(), Sign.MINUS, new IntegerLiteral(1)
    );
    final Expression expression3 = new ArithmeticUnaryExpression(
        Optional.empty(), Sign.MINUS, new DecimalLiteral(new BigDecimal("345.5"))
    );
    final Expression expression4 = new ArithmeticUnaryExpression(
        Optional.empty(), Sign.MINUS, new DoubleLiteral(45.5d)
    );

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

    // Then:
    assertThat(interpreter1.evaluate(ROW), is(1));
    assertThat(interpreter2.evaluate(ROW), is(-1));
    assertThat(interpreter3.evaluate(ROW), is(new BigDecimal("-345.5")));
    assertThat(interpreter4.evaluate(ROW), is(-45.5d));
  }