/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.elasticsearch.painless;
/** Tests for subtraction operator across all types */
//TODO: NaN/Inf/overflow/...
public class SubtractionTests extends ScriptTestCase {
public void testBasics() throws Exception {
assertEquals(2 - 1, exec("return 2 - 1;"));
assertEquals(-1, exec("int x = 1; char y = 2; return x - y;"));
}
public void testInt() throws Exception {
assertEquals(1-1, exec("int x = 1; int y = 1; return x-y;"));
assertEquals(2-3, exec("int x = 2; int y = 3; return x-y;"));
assertEquals(5-10, exec("int x = 5; int y = 10; return x-y;"));
assertEquals(1-1-2, exec("int x = 1; int y = 1; int z = 2; return x-y-z;"));
assertEquals((1-1)-2, exec("int x = 1; int y = 1; int z = 2; return (x-y)-z;"));
assertEquals(1-(1-2), exec("int x = 1; int y = 1; int z = 2; return x-(y-z);"));
assertEquals(10-0, exec("int x = 10; int y = 0; return x-y;"));
assertEquals(0-0, exec("int x = 0; int y = 0; return x-x;"));
}
public void testIntConst() throws Exception {
assertEquals(1-1, exec("return 1-1;"));
assertEquals(2-3, exec("return 2-3;"));
assertEquals(5-10, exec("return 5-10;"));
assertEquals(1-1-2, exec("return 1-1-2;"));
assertEquals((1-1)-2, exec("return (1-1)-2;"));
assertEquals(1-(1-2), exec("return 1-(1-2);"));
assertEquals(10-0, exec("return 10-0;"));
assertEquals(0-0, exec("return 0-0;"));
}
public void testByte() throws Exception {
assertEquals((byte)1-(byte)1, exec("byte x = 1; byte y = 1; return x-y;"));
assertEquals((byte)2-(byte)3, exec("byte x = 2; byte y = 3; return x-y;"));
assertEquals((byte)5-(byte)10, exec("byte x = 5; byte y = 10; return x-y;"));
assertEquals((byte)1-(byte)1-(byte)2, exec("byte x = 1; byte y = 1; byte z = 2; return x-y-z;"));
assertEquals(((byte)1-(byte)1)-(byte)2, exec("byte x = 1; byte y = 1; byte z = 2; return (x-y)-z;"));
assertEquals((byte)1-((byte)1-(byte)2), exec("byte x = 1; byte y = 1; byte z = 2; return x-(y-z);"));
assertEquals((byte)10-(byte)1, exec("byte x = 10; byte y = 1; return x-y;"));
assertEquals((byte)0-(byte)0, exec("byte x = 0; byte y = 0; return x-y;"));
}
public void testByteConst() throws Exception {
assertEquals((byte)1-(byte)1, exec("return (byte)1-(byte)1;"));
assertEquals((byte)2-(byte)3, exec("return (byte)2-(byte)3;"));
assertEquals((byte)5-(byte)10, exec("return (byte)5-(byte)10;"));
assertEquals((byte)1-(byte)1-(byte)2, exec("return (byte)1-(byte)1-(byte)2;"));
assertEquals(((byte)1-(byte)1)-(byte)2, exec("return ((byte)1-(byte)1)-(byte)2;"));
assertEquals((byte)1-((byte)1-(byte)2), exec("return (byte)1-((byte)1-(byte)2);"));
assertEquals((byte)10-(byte)1, exec("return (byte)10-(byte)1;"));
assertEquals((byte)0-(byte)0, exec("return (byte)0-(byte)0;"));
}
public void testChar() throws Exception {
assertEquals((char)1-(char)1, exec("char x = 1; char y = 1; return x-y;"));
assertEquals((char)2-(char)3, exec("char x = 2; char y = 3; return x-y;"));
assertEquals((char)5-(char)10, exec("char x = 5; char y = 10; return x-y;"));
assertEquals((char)1-(char)1-(char)2, exec("char x = 1; char y = 1; char z = 2; return x-y-z;"));
assertEquals(((char)1-(char)1)-(char)2, exec("char x = 1; char y = 1; char z = 2; return (x-y)-z;"));
assertEquals((char)1-((char)1-(char)2), exec("char x = 1; char y = 1; char z = 2; return x-(y-z);"));
assertEquals((char)10-(char)1, exec("char x = 10; char y = 1; return x-y;"));
assertEquals((char)0-(char)0, exec("char x = 0; char y = 0; return x-y;"));
}
public void testCharConst() throws Exception {
assertEquals((char)1-(char)1, exec("return (char)1-(char)1;"));
assertEquals((char)2-(char)3, exec("return (char)2-(char)3;"));
assertEquals((char)5-(char)10, exec("return (char)5-(char)10;"));
assertEquals((char)1-(char)1-(char)2, exec("return (char)1-(char)1-(char)2;"));
assertEquals(((char)1-(char)1)-(char)2, exec("return ((char)1-(char)1)-(char)2;"));
assertEquals((char)1-((char)1-(char)2), exec("return (char)1-((char)1-(char)2);"));
assertEquals((char)10-(char)1, exec("return (char)10-(char)1;"));
assertEquals((char)0-(char)0, exec("return (char)0-(char)0;"));
}
public void testShort() throws Exception {
assertEquals((short)1-(short)1, exec("short x = 1; short y = 1; return x-y;"));
assertEquals((short)2-(short)3, exec("short x = 2; short y = 3; return x-y;"));
assertEquals((short)5-(short)10, exec("short x = 5; short y = 10; return x-y;"));
assertEquals((short)1-(short)1-(short)2, exec("short x = 1; short y = 1; short z = 2; return x-y-z;"));
assertEquals(((short)1-(short)1)-(short)2, exec("short x = 1; short y = 1; short z = 2; return (x-y)-z;"));
assertEquals((short)1-((short)1-(short)2), exec("short x = 1; short y = 1; short z = 2; return x-(y-z);"));
assertEquals((short)10-(short)1, exec("short x = 10; short y = 1; return x-y;"));
assertEquals((short)0-(short)0, exec("short x = 0; short y = 0; return x-y;"));
}
public void testShortConst() throws Exception {
assertEquals((short)1-(short)1, exec("return (short)1-(short)1;"));
assertEquals((short)2-(short)3, exec("return (short)2-(short)3;"));
assertEquals((short)5-(short)10, exec("return (short)5-(short)10;"));
assertEquals((short)1-(short)1-(short)2, exec("return (short)1-(short)1-(short)2;"));
assertEquals(((short)1-(short)1)-(short)2, exec("return ((short)1-(short)1)-(short)2;"));
assertEquals((short)1-((short)1-(short)2), exec("return (short)1-((short)1-(short)2);"));
assertEquals((short)10-(short)1, exec("return (short)10-(short)1;"));
assertEquals((short)0-(short)0, exec("return (short)0-(short)0;"));
}
public void testLong() throws Exception {
assertEquals(1L-1L, exec("long x = 1; long y = 1; return x-y;"));
assertEquals(2L-3L, exec("long x = 2; long y = 3; return x-y;"));
assertEquals(5L-10L, exec("long x = 5; long y = 10; return x-y;"));
assertEquals(1L-1L-2L, exec("long x = 1; long y = 1; int z = 2; return x-y-z;"));
assertEquals((1L-1L)-2L, exec("long x = 1; long y = 1; int z = 2; return (x-y)-z;"));
assertEquals(1L-(1L-2L), exec("long x = 1; long y = 1; int z = 2; return x-(y-z);"));
assertEquals(10L-0L, exec("long x = 10; long y = 0; return x-y;"));
assertEquals(0L-0L, exec("long x = 0; long y = 0; return x-x;"));
}
public void testLongConst() throws Exception {
assertEquals(1L-1L, exec("return 1L-1L;"));
assertEquals(2L-3L, exec("return 2L-3L;"));
assertEquals(5L-10L, exec("return 5L-10L;"));
assertEquals(1L-1L-2L, exec("return 1L-1L-2L;"));
assertEquals((1L-1L)-2L, exec("return (1L-1L)-2L;"));
assertEquals(1L-(1L-2L), exec("return 1L-(1L-2L);"));
assertEquals(10L-0L, exec("return 10L-0L;"));
assertEquals(0L-0L, exec("return 0L-0L;"));
}
public void testFloat() throws Exception {
assertEquals(1F-1F, exec("float x = 1; float y = 1; return x-y;"));
assertEquals(2F-3F, exec("float x = 2; float y = 3; return x-y;"));
assertEquals(5F-10F, exec("float x = 5; float y = 10; return x-y;"));
assertEquals(1F-1F-2F, exec("float x = 1; float y = 1; float z = 2; return x-y-z;"));
assertEquals((1F-1F)-2F, exec("float x = 1; float y = 1; float z = 2; return (x-y)-z;"));
assertEquals(1F-(1F-2F), exec("float x = 1; float y = 1; float z = 2; return x-(y-z);"));
assertEquals(10F-0F, exec("float x = 10; float y = 0; return x-y;"));
assertEquals(0F-0F, exec("float x = 0; float y = 0; return x-x;"));
}
public void testFloatConst() throws Exception {
assertEquals(1F-1F, exec("return 1F-1F;"));
assertEquals(2F-3F, exec("return 2F-3F;"));
assertEquals(5F-10F, exec("return 5F-10F;"));
assertEquals(1F-1F-2F, exec("return 1F-1F-2F;"));
assertEquals((1F-1F)-2F, exec("return (1F-1F)-2F;"));
assertEquals(1F-(1F-2F), exec("return 1F-(1F-2F);"));
assertEquals(10F-0F, exec("return 10F-0F;"));
assertEquals(0F-0F, exec("return 0F-0F;"));
}
public void testDouble() throws Exception {
assertEquals(1D-1D, exec("double x = 1; double y = 1; return x-y;"));
assertEquals(2D-3D, exec("double x = 2; double y = 3; return x-y;"));
assertEquals(5D-10D, exec("double x = 5; double y = 10; return x-y;"));
assertEquals(1D-1D-2D, exec("double x = 1; double y = 1; double z = 2; return x-y-z;"));
assertEquals((1D-1D)-2D, exec("double x = 1; double y = 1; double z = 2; return (x-y)-z;"));
assertEquals(1D-(1D-2D), exec("double x = 1; double y = 1; double z = 2; return x-(y-z);"));
assertEquals(10D-0D, exec("double x = 10; float y = 0; return x-y;"));
assertEquals(0D-0D, exec("double x = 0; float y = 0; return x-x;"));
}
public void testyDoubleConst() throws Exception {
assertEquals(1.0-1.0, exec("return 1.0-1.0;"));
assertEquals(2.0-3.0, exec("return 2.0-3.0;"));
assertEquals(5.0-10.0, exec("return 5.0-10.0;"));
assertEquals(1.0-1.0-2.0, exec("return 1.0-1.0-2.0;"));
assertEquals((1.0-1.0)-2.0, exec("return (1.0-1.0)-2.0;"));
assertEquals(1.0-(1.0-2.0), exec("return 1.0-(1.0-2.0);"));
assertEquals(10.0-0.0, exec("return 10.0-0.0;"));
assertEquals(0.0-0.0, exec("return 0.0-0.0;"));
}
public void testDef() {
assertEquals(0, exec("def x = (byte)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (short)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (char)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (int)1; def y = (byte)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; def y = (byte)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; def y = (byte)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (byte)1; def y = (short)1; return x - y"));
assertEquals(0, exec("def x = (short)1; def y = (short)1; return x - y"));
assertEquals(0, exec("def x = (char)1; def y = (short)1; return x - y"));
assertEquals(0, exec("def x = (int)1; def y = (short)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; def y = (short)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; def y = (short)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (short)1; return x - y"));
assertEquals(0, exec("def x = (byte)1; def y = (char)1; return x - y"));
assertEquals(0, exec("def x = (short)1; def y = (char)1; return x - y"));
assertEquals(0, exec("def x = (char)1; def y = (char)1; return x - y"));
assertEquals(0, exec("def x = (int)1; def y = (char)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; def y = (char)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; def y = (char)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (char)1; return x - y"));
assertEquals(0, exec("def x = (byte)1; def y = (int)1; return x - y"));
assertEquals(0, exec("def x = (short)1; def y = (int)1; return x - y"));
assertEquals(0, exec("def x = (char)1; def y = (int)1; return x - y"));
assertEquals(0, exec("def x = (int)1; def y = (int)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; def y = (int)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; def y = (int)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (int)1; return x - y"));
assertEquals(0L, exec("def x = (byte)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (short)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (char)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (int)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; def y = (long)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; def y = (long)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (long)1; return x - y"));
assertEquals(0F, exec("def x = (byte)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (short)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (char)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (int)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (long)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; def y = (float)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (float)1; return x - y"));
assertEquals(0D, exec("def x = (byte)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (short)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (char)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (int)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (long)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (float)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; def y = (double)1; return x - y"));
}
public void testDefTypedLHS() {
assertEquals(0, exec("byte x = (byte)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("short x = (short)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("char x = (char)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("int x = (int)1; def y = (byte)1; return x - y"));
assertEquals(0L, exec("long x = (long)1; def y = (byte)1; return x - y"));
assertEquals(0F, exec("float x = (float)1; def y = (byte)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (byte)1; return x - y"));
assertEquals(0, exec("byte x = (byte)1; def y = (short)1; return x - y"));
assertEquals(0, exec("short x = (short)1; def y = (short)1; return x - y"));
assertEquals(0, exec("char x = (char)1; def y = (short)1; return x - y"));
assertEquals(0, exec("int x = (int)1; def y = (short)1; return x - y"));
assertEquals(0L, exec("long x = (long)1; def y = (short)1; return x - y"));
assertEquals(0F, exec("float x = (float)1; def y = (short)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (short)1; return x - y"));
assertEquals(0, exec("byte x = (byte)1; def y = (char)1; return x - y"));
assertEquals(0, exec("short x = (short)1; def y = (char)1; return x - y"));
assertEquals(0, exec("char x = (char)1; def y = (char)1; return x - y"));
assertEquals(0, exec("int x = (int)1; def y = (char)1; return x - y"));
assertEquals(0L, exec("long x = (long)1; def y = (char)1; return x - y"));
assertEquals(0F, exec("float x = (float)1; def y = (char)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (char)1; return x - y"));
assertEquals(0, exec("byte x = (byte)1; def y = (int)1; return x - y"));
assertEquals(0, exec("short x = (short)1; def y = (int)1; return x - y"));
assertEquals(0, exec("char x = (char)1; def y = (int)1; return x - y"));
assertEquals(0, exec("int x = (int)1; def y = (int)1; return x - y"));
assertEquals(0L, exec("long x = (long)1; def y = (int)1; return x - y"));
assertEquals(0F, exec("float x = (float)1; def y = (int)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (int)1; return x - y"));
assertEquals(0L, exec("byte x = (byte)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("short x = (short)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("char x = (char)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("int x = (int)1; def y = (long)1; return x - y"));
assertEquals(0L, exec("long x = (long)1; def y = (long)1; return x - y"));
assertEquals(0F, exec("float x = (float)1; def y = (long)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (long)1; return x - y"));
assertEquals(0F, exec("byte x = (byte)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("short x = (short)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("char x = (char)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("int x = (int)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("long x = (long)1; def y = (float)1; return x - y"));
assertEquals(0F, exec("float x = (float)1; def y = (float)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (float)1; return x - y"));
assertEquals(0D, exec("byte x = (byte)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("short x = (short)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("char x = (char)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("int x = (int)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("long x = (long)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("float x = (float)1; def y = (double)1; return x - y"));
assertEquals(0D, exec("double x = (double)1; def y = (double)1; return x - y"));
}
public void testDefTypedRHS() {
assertEquals(0, exec("def x = (byte)1; byte y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (short)1; byte y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (char)1; byte y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (int)1; byte y = (byte)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; byte y = (byte)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; byte y = (byte)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; byte y = (byte)1; return x - y"));
assertEquals(0, exec("def x = (byte)1; short y = (short)1; return x - y"));
assertEquals(0, exec("def x = (short)1; short y = (short)1; return x - y"));
assertEquals(0, exec("def x = (char)1; short y = (short)1; return x - y"));
assertEquals(0, exec("def x = (int)1; short y = (short)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; short y = (short)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; short y = (short)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; short y = (short)1; return x - y"));
assertEquals(0, exec("def x = (byte)1; char y = (char)1; return x - y"));
assertEquals(0, exec("def x = (short)1; char y = (char)1; return x - y"));
assertEquals(0, exec("def x = (char)1; char y = (char)1; return x - y"));
assertEquals(0, exec("def x = (int)1; char y = (char)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; char y = (char)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; char y = (char)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; char y = (char)1; return x - y"));
assertEquals(0, exec("def x = (byte)1; int y = (int)1; return x - y"));
assertEquals(0, exec("def x = (short)1; int y = (int)1; return x - y"));
assertEquals(0, exec("def x = (char)1; int y = (int)1; return x - y"));
assertEquals(0, exec("def x = (int)1; int y = (int)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; int y = (int)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; int y = (int)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; int y = (int)1; return x - y"));
assertEquals(0L, exec("def x = (byte)1; long y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (short)1; long y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (char)1; long y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (int)1; long y = (long)1; return x - y"));
assertEquals(0L, exec("def x = (long)1; long y = (long)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; long y = (long)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; long y = (long)1; return x - y"));
assertEquals(0F, exec("def x = (byte)1; float y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (short)1; float y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (char)1; float y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (int)1; float y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (long)1; float y = (float)1; return x - y"));
assertEquals(0F, exec("def x = (float)1; float y = (float)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; float y = (float)1; return x - y"));
assertEquals(0D, exec("def x = (byte)1; double y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (short)1; double y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (char)1; double y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (int)1; double y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (long)1; double y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (float)1; double y = (double)1; return x - y"));
assertEquals(0D, exec("def x = (double)1; double y = (double)1; return x - y"));
}
public void testCompoundAssignment() {
// byte
assertEquals((byte) 15, exec("byte x = 5; x -= -10; return x;"));
assertEquals((byte) -5, exec("byte x = 5; x -= 10; return x;"));
// short
assertEquals((short) 15, exec("short x = 5; x -= -10; return x;"));
assertEquals((short) -5, exec("short x = 5; x -= 10; return x;"));
// char
assertEquals((char) 15, exec("char x = 5; x -= -10; return x;"));
assertEquals((char) 5, exec("char x = 10; x -= 5; return x;"));
// int
assertEquals(15, exec("int x = 5; x -= -10; return x;"));
assertEquals(-5, exec("int x = 5; x -= 10; return x;"));
// long
assertEquals(15L, exec("long x = 5; x -= -10; return x;"));
assertEquals(-5L, exec("long x = 5; x -= 10; return x;"));
// float
assertEquals(15F, exec("float x = 5f; x -= -10; return x;"));
assertEquals(-5F, exec("float x = 5f; x -= 10; return x;"));
// double
assertEquals(15D, exec("double x = 5.0; x -= -10; return x;"));
assertEquals(-5D, exec("double x = 5.0; x -= 10; return x;"));
}
public void testDefCompoundAssignment() {
// byte
assertEquals((byte) 15, exec("def x = (byte)5; x -= -10; return x;"));
assertEquals((byte) -5, exec("def x = (byte)5; x -= 10; return x;"));
// short
assertEquals((short) 15, exec("def x = (short)5; x -= -10; return x;"));
assertEquals((short) -5, exec("def x = (short)5; x -= 10; return x;"));
// char
assertEquals((char) 15, exec("def x = (char)5; x -= -10; return x;"));
assertEquals((char) 5, exec("def x = (char)10; x -= 5; return x;"));
// int
assertEquals(15, exec("def x = 5; x -= -10; return x;"));
assertEquals(-5, exec("def x = 5; x -= 10; return x;"));
// long
assertEquals(15L, exec("def x = 5L; x -= -10; return x;"));
assertEquals(-5L, exec("def x = 5L; x -= 10; return x;"));
// float
assertEquals(15F, exec("def x = 5f; x -= -10; return x;"));
assertEquals(-5F, exec("def x = 5f; x -= 10; return x;"));
// double
assertEquals(15D, exec("def x = 5.0; x -= -10; return x;"));
assertEquals(-5D, exec("def x = 5.0; x -= 10; return x;"));
}
}