@Test
  public void testPlus() throws Exception {
    evaluate("7 + 2", "9", Integer.class);
    evaluate("3.0f + 5.0f", 8.0f, Float.class);
    evaluate("3.0d + 5.0d", 8.0d, Double.class);

    evaluate("'ab' + 2", "ab2", String.class);
    evaluate("2 + 'a'", "2a", String.class);
    evaluate("'ab' + null", "abnull", String.class);
    evaluate("null + 'ab'", "nullab", String.class);

    // AST:
    SpelExpression expr = (SpelExpression) parser.parseExpression("+3");
    Assert.assertEquals("+3", expr.toStringAST());
    expr = (SpelExpression) parser.parseExpression("2+3");
    Assert.assertEquals("(2 + 3)", expr.toStringAST());

    // use as a unary operator
    evaluate("+5d", 5d, Double.class);
    evaluate("+5L", 5L, Long.class);
    evaluate("+5", 5, Integer.class);
    evaluateAndCheckError("+'abc'", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);

    // string concatenation
    evaluate("'abc'+'def'", "abcdef", String.class);

    //
    evaluate("5 + new Integer('37')", 42, Integer.class);
  }
  @Test
  public void testMinus() throws Exception {
    evaluate("'c' - 2", "a", String.class);
    evaluate("3.0f - 5.0f", -2.0f, Float.class);
    evaluateAndCheckError("'ab' - 2", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
    evaluateAndCheckError("2-'ab'", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
    SpelExpression expr = (SpelExpression) parser.parseExpression("-3");
    Assert.assertEquals("-3", expr.toStringAST());
    expr = (SpelExpression) parser.parseExpression("2-3");
    Assert.assertEquals("(2 - 3)", expr.toStringAST());

    evaluate("-5d", -5d, Double.class);
    evaluate("-5L", -5L, Long.class);
    evaluate("-5", -5, Integer.class);
    evaluateAndCheckError("-'abc'", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
  }