/* * 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 addition operator across all types */ //TODO: NaN/Inf/overflow/... public class AdditionTests extends ScriptTestCase { public void testBasics() throws Exception { assertEquals(3.0, exec("double x = 1; byte y = 2; return x + y;")); } public void testInt() throws Exception { assertEquals(1+1, exec("int x = 1; int y = 1; return x+y;")); assertEquals(1+2, exec("int x = 1; int y = 2; 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(0+1, exec("int x = 0; int y = 1; return x+y;")); assertEquals(1+0, exec("int x = 1; int y = 0; return x+y;")); assertEquals(0+0, exec("int x = 0; int y = 0; return x+y;")); assertEquals(0+0, exec("int x = 0; int y = 0; return x+y;")); } public void testIntConst() throws Exception { assertEquals(1+1, exec("return 1+1;")); assertEquals(1+2, exec("return 1+2;")); 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(0+1, exec("return 0+1;")); assertEquals(1+0, exec("return 1+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)1+(byte)2, exec("byte x = 1; byte y = 2; 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)0+(byte)1, exec("byte x = 0; byte y = 1; return x+y;")); assertEquals((byte)1+(byte)0, exec("byte x = 1; byte y = 0; 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)1+(byte)2, exec("return (byte)1+(byte)2;")); 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)0+(byte)1, exec("return (byte)0+(byte)1;")); assertEquals((byte)1+(byte)0, exec("return (byte)1+(byte)0;")); 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)1+(char)2, exec("char x = 1; char y = 2; 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)0+(char)1, exec("char x = 0; char y = 1; return x+y;")); assertEquals((char)1+(char)0, exec("char x = 1; char y = 0; 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)1+(char)2, exec("return (char)1+(char)2;")); 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)0+(char)1, exec("return (char)0+(char)1;")); assertEquals((char)1+(char)0, exec("return (char)1+(char)0;")); 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)1+(short)2, exec("short x = 1; short y = 2; 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)0+(short)1, exec("short x = 0; short y = 1; return x+y;")); assertEquals((short)1+(short)0, exec("short x = 1; short y = 0; 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)1+(short)2, exec("return (short)1+(short)2;")); 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)0+(short)1, exec("return (short)0+(short)1;")); assertEquals((short)1+(short)0, exec("return (short)1+(short)0;")); 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(1L+2L, exec("long x = 1; long y = 2; 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; long z = 2; return x+y+z;")); assertEquals((1L+1L)+2L, exec("long x = 1; long y = 1; long z = 2; return (x+y)+z;")); assertEquals(1L+(1L+2L), exec("long x = 1; long y = 1; long z = 2; return x+(y+z);")); assertEquals(0L+1L, exec("long x = 0; long y = 1; return x+y;")); assertEquals(1L+0L, exec("long x = 1; long y = 0; return x+y;")); assertEquals(0L+0L, exec("long x = 0; long y = 0; return x+y;")); } public void testLongConst() throws Exception { assertEquals(1L+1L, exec("return 1L+1L;")); assertEquals(1L+2L, exec("return 1L+2L;")); 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(0L+1L, exec("return 0L+1L;")); assertEquals(1L+0L, exec("return 1L+0L;")); assertEquals(0L+0L, exec("return 0L+0L;")); } public void testFloat() throws Exception { assertEquals(1F+1F, exec("float x = 1F; float y = 1F; return x+y;")); assertEquals(1F+2F, exec("float x = 1F; float y = 2F; return x+y;")); assertEquals(5F+10F, exec("float x = 5F; float y = 10F; return x+y;")); assertEquals(1F+1F+2F, exec("float x = 1F; float y = 1F; float z = 2F; return x+y+z;")); assertEquals((1F+1F)+2F, exec("float x = 1F; float y = 1F; float z = 2F; return (x+y)+z;")); assertEquals((1F+1F)+2F, exec("float x = 1F; float y = 1F; float z = 2F; return x+(y+z);")); assertEquals(0F+1F, exec("float x = 0F; float y = 1F; return x+y;")); assertEquals(1F+0F, exec("float x = 1F; float y = 0F; return x+y;")); assertEquals(0F+0F, exec("float x = 0F; float y = 0F; return x+y;")); } public void testFloatConst() throws Exception { assertEquals(1F+1F, exec("return 1F+1F;")); assertEquals(1F+2F, exec("return 1F+2F;")); 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(0F+1F, exec("return 0F+1F;")); assertEquals(1F+0F, exec("return 1F+0F;")); assertEquals(0F+0F, exec("return 0F+0F;")); } public void testDouble() throws Exception { assertEquals(1.0+1.0, exec("double x = 1.0; double y = 1.0; return x+y;")); assertEquals(1.0+2.0, exec("double x = 1.0; double y = 2.0; return x+y;")); assertEquals(5.0+10.0, exec("double x = 5.0; double y = 10.0; return x+y;")); assertEquals(1.0+1.0+2.0, exec("double x = 1.0; double y = 1.0; double z = 2.0; return x+y+z;")); assertEquals((1.0+1.0)+2.0, exec("double x = 1.0; double y = 1.0; double z = 2.0; return (x+y)+z;")); assertEquals(1.0+(1.0+2.0), exec("double x = 1.0; double y = 1.0; double z = 2.0; return x+(y+z);")); assertEquals(0.0+1.0, exec("double x = 0.0; double y = 1.0; return x+y;")); assertEquals(1.0+0.0, exec("double x = 1.0; double y = 0.0; return x+y;")); assertEquals(0.0+0.0, exec("double x = 0.0; double y = 0.0; return x+y;")); } public void testDoubleConst() throws Exception { assertEquals(1.0+1.0, exec("return 1.0+1.0;")); assertEquals(1.0+2.0, exec("return 1.0+2.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(0.0+1.0, exec("return 0.0+1.0;")); assertEquals(1.0+0.0, exec("return 1.0+0.0;")); assertEquals(0.0+0.0, exec("return 0.0+0.0;")); } public void testDef() { assertEquals(2, exec("def x = (byte)1; def y = (byte)1; return x + y")); assertEquals(2, exec("def x = (short)1; def y = (byte)1; return x + y")); assertEquals(2, exec("def x = (char)1; def y = (byte)1; return x + y")); assertEquals(2, exec("def x = (int)1; def y = (byte)1; return x + y")); assertEquals(2L, exec("def x = (long)1; def y = (byte)1; return x + y")); assertEquals(2F, exec("def x = (float)1; def y = (byte)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (byte)1; return x + y")); assertEquals(2, exec("def x = (byte)1; def y = (short)1; return x + y")); assertEquals(2, exec("def x = (short)1; def y = (short)1; return x + y")); assertEquals(2, exec("def x = (char)1; def y = (short)1; return x + y")); assertEquals(2, exec("def x = (int)1; def y = (short)1; return x + y")); assertEquals(2L, exec("def x = (long)1; def y = (short)1; return x + y")); assertEquals(2F, exec("def x = (float)1; def y = (short)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (short)1; return x + y")); assertEquals(2, exec("def x = (byte)1; def y = (char)1; return x + y")); assertEquals(2, exec("def x = (short)1; def y = (char)1; return x + y")); assertEquals(2, exec("def x = (char)1; def y = (char)1; return x + y")); assertEquals(2, exec("def x = (int)1; def y = (char)1; return x + y")); assertEquals(2L, exec("def x = (long)1; def y = (char)1; return x + y")); assertEquals(2F, exec("def x = (float)1; def y = (char)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (char)1; return x + y")); assertEquals(2, exec("def x = (byte)1; def y = (int)1; return x + y")); assertEquals(2, exec("def x = (short)1; def y = (int)1; return x + y")); assertEquals(2, exec("def x = (char)1; def y = (int)1; return x + y")); assertEquals(2, exec("def x = (int)1; def y = (int)1; return x + y")); assertEquals(2L, exec("def x = (long)1; def y = (int)1; return x + y")); assertEquals(2F, exec("def x = (float)1; def y = (int)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (int)1; return x + y")); assertEquals(2L, exec("def x = (byte)1; def y = (long)1; return x + y")); assertEquals(2L, exec("def x = (short)1; def y = (long)1; return x + y")); assertEquals(2L, exec("def x = (char)1; def y = (long)1; return x + y")); assertEquals(2L, exec("def x = (int)1; def y = (long)1; return x + y")); assertEquals(2L, exec("def x = (long)1; def y = (long)1; return x + y")); assertEquals(2F, exec("def x = (float)1; def y = (long)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (long)1; return x + y")); assertEquals(2F, exec("def x = (byte)1; def y = (float)1; return x + y")); assertEquals(2F, exec("def x = (short)1; def y = (float)1; return x + y")); assertEquals(2F, exec("def x = (char)1; def y = (float)1; return x + y")); assertEquals(2F, exec("def x = (int)1; def y = (float)1; return x + y")); assertEquals(2F, exec("def x = (long)1; def y = (float)1; return x + y")); assertEquals(2F, exec("def x = (float)1; def y = (float)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (float)1; return x + y")); assertEquals(2D, exec("def x = (byte)1; def y = (double)1; return x + y")); assertEquals(2D, exec("def x = (short)1; def y = (double)1; return x + y")); assertEquals(2D, exec("def x = (char)1; def y = (double)1; return x + y")); assertEquals(2D, exec("def x = (int)1; def y = (double)1; return x + y")); assertEquals(2D, exec("def x = (long)1; def y = (double)1; return x + y")); assertEquals(2D, exec("def x = (float)1; def y = (double)1; return x + y")); assertEquals(2D, exec("def x = (double)1; def y = (double)1; return x + y")); } public void testDefTypedLHS() { assertEquals(2, exec("byte x = (byte)1; def y = (byte)1; return x + y")); assertEquals(2, exec("short x = (short)1; def y = (byte)1; return x + y")); assertEquals(2, exec("char x = (char)1; def y = (byte)1; return x + y")); assertEquals(2, exec("int x = (int)1; def y = (byte)1; return x + y")); assertEquals(2L, exec("long x = (long)1; def y = (byte)1; return x + y")); assertEquals(2F, exec("float x = (float)1; def y = (byte)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (byte)1; return x + y")); assertEquals(2, exec("byte x = (byte)1; def y = (short)1; return x + y")); assertEquals(2, exec("short x = (short)1; def y = (short)1; return x + y")); assertEquals(2, exec("char x = (char)1; def y = (short)1; return x + y")); assertEquals(2, exec("int x = (int)1; def y = (short)1; return x + y")); assertEquals(2L, exec("long x = (long)1; def y = (short)1; return x + y")); assertEquals(2F, exec("float x = (float)1; def y = (short)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (short)1; return x + y")); assertEquals(2, exec("byte x = (byte)1; def y = (char)1; return x + y")); assertEquals(2, exec("short x = (short)1; def y = (char)1; return x + y")); assertEquals(2, exec("char x = (char)1; def y = (char)1; return x + y")); assertEquals(2, exec("int x = (int)1; def y = (char)1; return x + y")); assertEquals(2L, exec("long x = (long)1; def y = (char)1; return x + y")); assertEquals(2F, exec("float x = (float)1; def y = (char)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (char)1; return x + y")); assertEquals(2, exec("byte x = (byte)1; def y = (int)1; return x + y")); assertEquals(2, exec("short x = (short)1; def y = (int)1; return x + y")); assertEquals(2, exec("char x = (char)1; def y = (int)1; return x + y")); assertEquals(2, exec("int x = (int)1; def y = (int)1; return x + y")); assertEquals(2L, exec("long x = (long)1; def y = (int)1; return x + y")); assertEquals(2F, exec("float x = (float)1; def y = (int)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (int)1; return x + y")); assertEquals(2L, exec("byte x = (byte)1; def y = (long)1; return x + y")); assertEquals(2L, exec("short x = (short)1; def y = (long)1; return x + y")); assertEquals(2L, exec("char x = (char)1; def y = (long)1; return x + y")); assertEquals(2L, exec("int x = (int)1; def y = (long)1; return x + y")); assertEquals(2L, exec("long x = (long)1; def y = (long)1; return x + y")); assertEquals(2F, exec("float x = (float)1; def y = (long)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (long)1; return x + y")); assertEquals(2F, exec("byte x = (byte)1; def y = (float)1; return x + y")); assertEquals(2F, exec("short x = (short)1; def y = (float)1; return x + y")); assertEquals(2F, exec("char x = (char)1; def y = (float)1; return x + y")); assertEquals(2F, exec("int x = (int)1; def y = (float)1; return x + y")); assertEquals(2F, exec("long x = (long)1; def y = (float)1; return x + y")); assertEquals(2F, exec("float x = (float)1; def y = (float)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (float)1; return x + y")); assertEquals(2D, exec("byte x = (byte)1; def y = (double)1; return x + y")); assertEquals(2D, exec("short x = (short)1; def y = (double)1; return x + y")); assertEquals(2D, exec("char x = (char)1; def y = (double)1; return x + y")); assertEquals(2D, exec("int x = (int)1; def y = (double)1; return x + y")); assertEquals(2D, exec("long x = (long)1; def y = (double)1; return x + y")); assertEquals(2D, exec("float x = (float)1; def y = (double)1; return x + y")); assertEquals(2D, exec("double x = (double)1; def y = (double)1; return x + y")); } public void testDefTypedRHS() { assertEquals(2, exec("def x = (byte)1; byte y = (byte)1; return x + y")); assertEquals(2, exec("def x = (short)1; byte y = (byte)1; return x + y")); assertEquals(2, exec("def x = (char)1; byte y = (byte)1; return x + y")); assertEquals(2, exec("def x = (int)1; byte y = (byte)1; return x + y")); assertEquals(2L, exec("def x = (long)1; byte y = (byte)1; return x + y")); assertEquals(2F, exec("def x = (float)1; byte y = (byte)1; return x + y")); assertEquals(2D, exec("def x = (double)1; byte y = (byte)1; return x + y")); assertEquals(2, exec("def x = (byte)1; short y = (short)1; return x + y")); assertEquals(2, exec("def x = (short)1; short y = (short)1; return x + y")); assertEquals(2, exec("def x = (char)1; short y = (short)1; return x + y")); assertEquals(2, exec("def x = (int)1; short y = (short)1; return x + y")); assertEquals(2L, exec("def x = (long)1; short y = (short)1; return x + y")); assertEquals(2F, exec("def x = (float)1; short y = (short)1; return x + y")); assertEquals(2D, exec("def x = (double)1; short y = (short)1; return x + y")); assertEquals(2, exec("def x = (byte)1; char y = (char)1; return x + y")); assertEquals(2, exec("def x = (short)1; char y = (char)1; return x + y")); assertEquals(2, exec("def x = (char)1; char y = (char)1; return x + y")); assertEquals(2, exec("def x = (int)1; char y = (char)1; return x + y")); assertEquals(2L, exec("def x = (long)1; char y = (char)1; return x + y")); assertEquals(2F, exec("def x = (float)1; char y = (char)1; return x + y")); assertEquals(2D, exec("def x = (double)1; char y = (char)1; return x + y")); assertEquals(2, exec("def x = (byte)1; int y = (int)1; return x + y")); assertEquals(2, exec("def x = (short)1; int y = (int)1; return x + y")); assertEquals(2, exec("def x = (char)1; int y = (int)1; return x + y")); assertEquals(2, exec("def x = (int)1; int y = (int)1; return x + y")); assertEquals(2L, exec("def x = (long)1; int y = (int)1; return x + y")); assertEquals(2F, exec("def x = (float)1; int y = (int)1; return x + y")); assertEquals(2D, exec("def x = (double)1; int y = (int)1; return x + y")); assertEquals(2L, exec("def x = (byte)1; long y = (long)1; return x + y")); assertEquals(2L, exec("def x = (short)1; long y = (long)1; return x + y")); assertEquals(2L, exec("def x = (char)1; long y = (long)1; return x + y")); assertEquals(2L, exec("def x = (int)1; long y = (long)1; return x + y")); assertEquals(2L, exec("def x = (long)1; long y = (long)1; return x + y")); assertEquals(2F, exec("def x = (float)1; long y = (long)1; return x + y")); assertEquals(2D, exec("def x = (double)1; long y = (long)1; return x + y")); assertEquals(2F, exec("def x = (byte)1; float y = (float)1; return x + y")); assertEquals(2F, exec("def x = (short)1; float y = (float)1; return x + y")); assertEquals(2F, exec("def x = (char)1; float y = (float)1; return x + y")); assertEquals(2F, exec("def x = (int)1; float y = (float)1; return x + y")); assertEquals(2F, exec("def x = (long)1; float y = (float)1; return x + y")); assertEquals(2F, exec("def x = (float)1; float y = (float)1; return x + y")); assertEquals(2D, exec("def x = (double)1; float y = (float)1; return x + y")); assertEquals(2D, exec("def x = (byte)1; double y = (double)1; return x + y")); assertEquals(2D, exec("def x = (short)1; double y = (double)1; return x + y")); assertEquals(2D, exec("def x = (char)1; double y = (double)1; return x + y")); assertEquals(2D, exec("def x = (int)1; double y = (double)1; return x + y")); assertEquals(2D, exec("def x = (long)1; double y = (double)1; return x + y")); assertEquals(2D, exec("def x = (float)1; double y = (double)1; return x + y")); assertEquals(2D, exec("def x = (double)1; double y = (double)1; return x + y")); } public void testDefNulls() { expectScriptThrows(NullPointerException.class, () -> { exec("def x = null; int y = 1; return x + y"); }); expectScriptThrows(NullPointerException.class, () -> { exec("int x = 1; def y = null; return x + y"); }); expectScriptThrows(NullPointerException.class, () -> { exec("def x = null; def y = 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 testDefCompoundAssignmentLHS() { // 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;")); } public void testDefCompoundAssignmentRHS() { // byte assertEquals((byte) 15, exec("byte x = 5; def y = 10; x += y; return x;")); assertEquals((byte) -5, exec("byte x = 5; def y = -10; x += y; return x;")); // short assertEquals((short) 15, exec("short x = 5; def y = 10; x += y; return x;")); assertEquals((short) -5, exec("short x = 5; def y = -10; x += y; return x;")); // char assertEquals((char) 15, exec("char x = 5; def y = 10; x += y; return x;")); assertEquals((char) 5, exec("char x = 10; def y = -5; x += y; return x;")); // int assertEquals(15, exec("int x = 5; def y = 10; x += y; return x;")); assertEquals(-5, exec("int x = 5; def y = -10; x += y; return x;")); // long assertEquals(15L, exec("long x = 5; def y = 10; x += y; return x;")); assertEquals(-5L, exec("long x = 5; def y = -10; x += y; return x;")); // float assertEquals(15F, exec("float x = 5f; def y = 10; x += y; return x;")); assertEquals(-5F, exec("float x = 5f; def y = -10; x += y; return x;")); // double assertEquals(15D, exec("double x = 5.0; def y = 10; x += y; return x;")); assertEquals(-5D, exec("double x = 5.0; def y = -10; x += y; return x;")); } }