|
@@ -79,4 +79,129 @@ public class ArrayTests extends ArrayLikeObjectTestCase {
|
|
|
public void testDivideArray() {
|
|
|
assertEquals(1, exec("def[] x = new def[1]; x[0] = 2; return x[0] / 2"));
|
|
|
}
|
|
|
+
|
|
|
+ public void testPrimitiveIteration() {
|
|
|
+ assertEquals(true, exec("def x = new boolean[] { true, false }; boolean s = false; for (boolean l : x) s |= l; return s"));
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new boolean[] { true, false }; short s = 0; for (short l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new boolean[] { true, false }; char s = 0; for (char l : x) s = l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new boolean[] { true, false }; int s = 0; for (int l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new boolean[] { true, false }; long s = 0; for (long l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new boolean[] { true, false }; float s = 0; for (float l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new boolean[] { true, false }; double s = 0; for (double l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ assertEquals(true, exec("def x = new boolean[] { true, false }; boolean s = false; for (def l : x) s |= l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 30, exec("def x = new byte[] { (byte)10, (byte)20 }; byte s = 0; for (byte l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 30, exec("def x = new byte[] { (byte)10, (byte)20 }; short s = 0; for (short l : x) s += l; return s"));
|
|
|
+ assertEquals((char) 20, exec("def x = new byte[] { (byte)10, (byte)20 }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals(30, exec("def x = new byte[] { (byte)10, (byte)20 }; int s = 0; for (int l : x) s += l; return s"));
|
|
|
+ assertEquals(30L, exec("def x = new byte[] { (byte)10, (byte)20 }; long s = 0; for (long l : x) s += l; return s"));
|
|
|
+ assertEquals(30f, exec("def x = new byte[] { (byte)10, (byte)20 }; float s = 0; for (float l : x) s += l; return s"));
|
|
|
+ assertEquals(30d, exec("def x = new byte[] { (byte)10, (byte)20 }; double s = 0; for (double l : x) s += l; return s"));
|
|
|
+ assertEquals((byte) 30, exec("def x = new byte[] { (byte)10, (byte)20 }; byte s = 0; for (def l : x) s += l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 30, exec("def x = new short[] { (short)10, (short)20 }; byte s = 0; for (byte l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 300, exec("def x = new short[] { (short)100, (short)200 }; short s = 0; for (short l : x) s += l; return s"));
|
|
|
+ assertEquals((char) 200, exec("def x = new short[] { (short)100, (short)200 }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals(300, exec("def x = new short[] { (short)100, (short)200 }; int s = 0; for (int l : x) s += l; return s"));
|
|
|
+ assertEquals(300L, exec("def x = new short[] { (short)100, (short)200 }; long s = 0; for (long l : x) s += l; return s"));
|
|
|
+ assertEquals(300f, exec("def x = new short[] { (short)100, (short)200 }; float s = 0; for (float l : x) s += l; return s"));
|
|
|
+ assertEquals(300d, exec("def x = new short[] { (short)100, (short)200 }; double s = 0; for (double l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 300, exec("def x = new short[] { (short)100, (short)200 }; short s = 0; for (def l : x) s += l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 'b', exec("def x = new char[] { (char)'a', (char)'b' }; byte s = 0; for (byte l : x) s = l; return s"));
|
|
|
+ assertEquals((short) 'b', exec("def x = new char[] { (char)'a', (char)'b' }; short s = 0; for (short l : x) s = l; return s"));
|
|
|
+ assertEquals('b', exec("def x = new char[] { (char)'a', (char)'b' }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals((int) 'b', exec("def x = new char[] { (char)'a', (char)'b' }; int s = 0; for (int l : x) s = l; return s"));
|
|
|
+ assertEquals((long) 'b', exec("def x = new char[] { (char)'a', (char)'b' }; long s = 0; for (long l : x) s = l; return s"));
|
|
|
+ assertEquals((float) 'b', exec("def x = new char[] { (char)'a', (char)'b' }; float s = 0; for (float l : x) s = l; return s"));
|
|
|
+ assertEquals((double) 'b', exec("def x = new char[] { (char)'a', (char)'b' }; double s = 0; for (double l : x) s = l; return s"));
|
|
|
+ assertEquals('b', exec("def x = new char[] { (char)'a', (char)'b' }; char s = 0; for (def l : x) s = l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 30, exec("def x = new int[] { 10, 20 }; byte s = 0; for (byte l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 300, exec("def x = new int[] { 100, 200 }; short s = 0; for (short l : x) s += l; return s"));
|
|
|
+ assertEquals((char) 200, exec("def x = new int[] { 100, 200 }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals(300, exec("def x = new int[] { 100, 200 }; int s = 0; for (int l : x) s += l; return s"));
|
|
|
+ assertEquals(300L, exec("def x = new int[] { 100, 200 }; long s = 0; for (long l : x) s += l; return s"));
|
|
|
+ assertEquals(300f, exec("def x = new int[] { 100, 200 }; float s = 0; for (float l : x) s += l; return s"));
|
|
|
+ assertEquals(300d, exec("def x = new int[] { 100, 200 }; double s = 0; for (double l : x) s += l; return s"));
|
|
|
+ assertEquals(300, exec("def x = new int[] { 100, 200 }; int s = 0; for (def l : x) s += l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 30, exec("def x = new long[] { 10, 20 }; byte s = 0; for (byte l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 300, exec("def x = new long[] { 100, 200 }; short s = 0; for (short l : x) s += l; return s"));
|
|
|
+ assertEquals((char) 200, exec("def x = new long[] { 100, 200 }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals(300, exec("def x = new long[] { 100, 200 }; int s = 0; for (int l : x) s += l; return s"));
|
|
|
+ assertEquals(300L, exec("def x = new long[] { 100, 200 }; long s = 0; for (long l : x) s += l; return s"));
|
|
|
+ assertEquals(300f, exec("def x = new long[] { 100, 200 }; float s = 0; for (float l : x) s += l; return s"));
|
|
|
+ assertEquals(300d, exec("def x = new long[] { 100, 200 }; double s = 0; for (double l : x) s += l; return s"));
|
|
|
+ assertEquals(300L, exec("def x = new long[] { 100, 200 }; long s = 0; for (def l : x) s += l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 30, exec("def x = new float[] { 10, 20 }; byte s = 0; for (byte l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 300, exec("def x = new float[] { 100, 200 }; short s = 0; for (short l : x) s += l; return s"));
|
|
|
+ assertEquals((char) 200, exec("def x = new float[] { 100, 200 }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals(300, exec("def x = new float[] { 100, 200 }; int s = 0; for (int l : x) s += l; return s"));
|
|
|
+ assertEquals(300L, exec("def x = new float[] { 100, 200 }; long s = 0; for (long l : x) s += l; return s"));
|
|
|
+ assertEquals(300f, exec("def x = new float[] { 100, 200 }; float s = 0; for (float l : x) s += l; return s"));
|
|
|
+ assertEquals(300d, exec("def x = new float[] { 100, 200 }; double s = 0; for (double l : x) s += l; return s"));
|
|
|
+ assertEquals(300f, exec("def x = new float[] { 100, 200 }; float s = 0; for (def l : x) s += l; return s"));
|
|
|
+
|
|
|
+ assertEquals((byte) 30, exec("def x = new double[] { 10, 20 }; byte s = 0; for (byte l : x) s += l; return s"));
|
|
|
+ assertEquals((short) 300, exec("def x = new double[] { 100, 200 }; short s = 0; for (short l : x) s += l; return s"));
|
|
|
+ assertEquals((char) 200, exec("def x = new double[] { 100, 200 }; char s = 0; for (char l : x) s = l; return s"));
|
|
|
+ assertEquals(300, exec("def x = new double[] { 100, 200 }; int s = 0; for (int l : x) s += l; return s"));
|
|
|
+ assertEquals(300L, exec("def x = new double[] { 100, 200 }; long s = 0; for (long l : x) s += l; return s"));
|
|
|
+ assertEquals(300f, exec("def x = new double[] { 100, 200 }; float s = 0; for (float l : x) s += l; return s"));
|
|
|
+ assertEquals(300d, exec("def x = new double[] { 100, 200 }; double s = 0; for (double l : x) s += l; return s"));
|
|
|
+ assertEquals(300d, exec("def x = new double[] { 100, 200 }; double s = 0; for (def l : x) s += l; return s"));
|
|
|
+
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; boolean s = false; for (boolean l : x) s |= l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; byte s = 0; for (byte l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; short s = 0; for (short l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; char s = 0; for (char l : x) s = l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; int s = 0; for (int l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; long s = 0; for (long l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; float s = 0; for (float l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ expectScriptThrows(
|
|
|
+ ClassCastException.class,
|
|
|
+ () -> exec("def x = new String[] { 'foo', 'bar' }; double s = 0; for (double l : x) s += l; return s")
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|