ART: Extend run-test 015

Add some more tests to 015-switch.

Change-Id: I10bd61d68ce961ae2e2dcf936ed9321014b56d05
diff --git a/test/015-switch/expected.txt b/test/015-switch/expected.txt
index 91b4714..be6d2ca 100644
--- a/test/015-switch/expected.txt
+++ b/test/015-switch/expected.txt
@@ -1,3 +1,119 @@
+packed
+default
+default
+0
+1
+2
+default
+default
+packed2
+-2
+-1
+0
+1
+2
+default
+default
+packed3
+default
+default
+default
+default
+2
+3
+4
+5
+6
+default
+default
+packed4
+default
+2147483646
+2147483647
+default
+packed5
+-2147483648
+-2147483647
+default
+packed6
+-2147483648
+default
+packed7
+default
+default
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+default
+sparse
+default
+default
+0
+1
+default
+3
+default
+default
+sparse2
+-2
+-1
+0
+default
+2
+default
+default
+sparse3
+default
+default
+default
+default
+2
+default
+4
+5
+6
+default
+default
+sparse4
+2147483645
+default
+2147483647
+default
+sparse5
+-2147483648
+default
+default
+sparse7
+default
+default
+1
+2
+default
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+default
 CORRECT (one)
 CORRECT (not found)
 CORRECT (large)
diff --git a/test/015-switch/src/Main.java b/test/015-switch/src/Main.java
index dd97a8c..2a7995a 100644
--- a/test/015-switch/src/Main.java
+++ b/test/015-switch/src/Main.java
@@ -18,7 +18,338 @@
  * Test switch() blocks
  */
 public class Main {
+
+    // TODO: This should be translated to smali tests, so it is guaranteed we have the right kind
+    //       of switch.
+
+    // Simple packed-switch.
+    public static void packedSwitch(int value) {
+        switch (value) {
+            case 0:
+                System.out.println("0"); break;
+            case 1:
+                System.out.println("1"); break;
+            case 2:
+                System.out.println("2"); break;
+            case 3:
+                System.out.println("3"); break;
+            case 4:
+                System.out.println("4"); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple packed-switch starting at a negative index.
+    public static void packedSwitch2(int value) {
+        switch (value) {
+            case -3:
+                System.out.println("-3"); break;
+            case -2:
+                System.out.println("-2"); break;
+            case -1:
+                System.out.println("-1"); break;
+            case 0:
+                System.out.println("0"); break;
+            case 1:
+                System.out.println("1"); break;
+            case 2:
+                System.out.println("2"); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple packed-switch starting above 0.
+    public static void packedSwitch3(int value) {
+        switch (value) {
+            case 2:
+                System.out.println("2"); break;
+            case 3:
+                System.out.println("3"); break;
+            case 4:
+                System.out.println("4"); break;
+            case 5:
+                System.out.println("5"); break;
+            case 6:
+                System.out.println("6"); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple packed-switch going up to max_int.
+    public static void packedSwitch4(int value) {
+        switch (value) {
+            case Integer.MAX_VALUE - 1:
+                System.out.println(Integer.MAX_VALUE - 1); break;
+            case Integer.MAX_VALUE:
+                System.out.println(Integer.MAX_VALUE); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple packed-switch starting at min_int.
+    public static void packedSwitch5(int value) {
+        switch (value) {
+            case Integer.MIN_VALUE:
+                System.out.println(Integer.MIN_VALUE); break;
+            case Integer.MIN_VALUE + 1:
+                System.out.println(Integer.MIN_VALUE + 1); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple (packed-)switch with only min_int.
+    public static void packedSwitch6(int value) {
+        switch (value) {
+            case Integer.MIN_VALUE:
+                System.out.println(Integer.MIN_VALUE); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Long packed-switch that might lead to not creating chained-ifs.
+    public static void packedSwitch7(int value) {
+        switch (value) {
+            case 1:
+                System.out.println(1); break;
+            case 2:
+                System.out.println(2); break;
+            case 3:
+                System.out.println(3); break;
+            case 4:
+                System.out.println(4); break;
+            case 5:
+                System.out.println(5); break;
+            case 6:
+                System.out.println(6); break;
+            case 7:
+                System.out.println(7); break;
+            case 8:
+                System.out.println(8); break;
+            case 9:
+                System.out.println(9); break;
+            case 10:
+                System.out.println(10); break;
+            case 11:
+                System.out.println(11); break;
+            case 12:
+                System.out.println(12); break;
+            case 13:
+                System.out.println(13); break;
+            case 14:
+                System.out.println(14); break;
+            case 15:
+                System.out.println(15); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Sparse switch, just leave a gap.
+    public static void sparseSwitch(int value) {
+        switch (value) {
+            case 0:
+                System.out.println("0"); break;
+            case 1:
+                System.out.println("1"); break;
+            case 3:
+                System.out.println("3"); break;
+            case 4:
+                System.out.println("4"); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple sparse-switch starting at a negative index.
+    public static void sparseSwitch2(int value) {
+        switch (value) {
+            case -3:
+                System.out.println("-3"); break;
+            case -2:
+                System.out.println("-2"); break;
+            case -1:
+                System.out.println("-1"); break;
+            case 0:
+                System.out.println("0"); break;
+            case 2:
+                System.out.println("2"); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple sparse-switch starting above 0.
+    public static void sparseSwitch3(int value) {
+        switch (value) {
+            case 2:
+                System.out.println("2"); break;
+            case 4:
+                System.out.println("4"); break;
+            case 5:
+                System.out.println("5"); break;
+            case 6:
+                System.out.println("6"); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple sparse-switch going up to max_int.
+    public static void sparseSwitch4(int value) {
+        switch (value) {
+            case Integer.MAX_VALUE - 2:
+                System.out.println(Integer.MAX_VALUE - 2); break;
+            case Integer.MAX_VALUE:
+                System.out.println(Integer.MAX_VALUE); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Simple sparse-switch starting at min_int.
+    public static void sparseSwitch5(int value) {
+        switch (value) {
+            case Integer.MIN_VALUE:
+                System.out.println(Integer.MIN_VALUE); break;
+            case Integer.MIN_VALUE + 2:
+                System.out.println(Integer.MIN_VALUE + 2); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
+    // Long sparse-switch that might lead to not creating chained-ifs.
+    public static void sparseSwitch7(int value) {
+        switch (value) {
+            case 1:
+                System.out.println(1); break;
+            case 2:
+                System.out.println(2); break;
+            case 4:
+                System.out.println(4); break;
+            case 5:
+                System.out.println(5); break;
+            case 6:
+                System.out.println(6); break;
+            case 7:
+                System.out.println(7); break;
+            case 8:
+                System.out.println(8); break;
+            case 9:
+                System.out.println(9); break;
+            case 10:
+                System.out.println(10); break;
+            case 11:
+                System.out.println(11); break;
+            case 12:
+                System.out.println(12); break;
+            case 13:
+                System.out.println(13); break;
+            case 14:
+                System.out.println(14); break;
+            case 15:
+                System.out.println(15); break;
+            default:
+                System.out.println("default"); break;
+        }
+    }
+
     public static void main(String args[]) {
+        /*
+         * Note: We are using for loops and calls to hopefully avoid simplifying the switch
+         *       structure from constant propagation. When inlining is supported, this needs to
+         *       be revisited.
+         */
+
+        System.out.println("packed");
+        for (int i = -2; i < 3; i++) {
+            packedSwitch(i);
+        }
+        packedSwitch(Integer.MIN_VALUE);
+        packedSwitch(Integer.MAX_VALUE);
+
+        System.out.println("packed2");
+        for (int i = -2; i < 3; i++) {
+            packedSwitch2(i);
+        }
+        packedSwitch2(Integer.MIN_VALUE);
+        packedSwitch2(Integer.MAX_VALUE);
+
+        System.out.println("packed3");
+        for (int i = -2; i < 7; i++) {
+            packedSwitch3(i);
+        }
+        packedSwitch3(Integer.MIN_VALUE);
+        packedSwitch3(Integer.MAX_VALUE);
+
+        System.out.println("packed4");
+        for (int i = Integer.MAX_VALUE - 2; i > 0; i++) {
+            packedSwitch4(i);
+        }
+        packedSwitch4(Integer.MIN_VALUE);
+
+        System.out.println("packed5");
+        for (int i = Integer.MIN_VALUE; i < Integer.MIN_VALUE + 2; i++) {
+            packedSwitch5(i);
+        }
+        packedSwitch5(Integer.MAX_VALUE);
+
+        System.out.println("packed6");
+        packedSwitch6(Integer.MIN_VALUE);
+        packedSwitch6(Integer.MAX_VALUE);
+
+        System.out.println("packed7");
+        for (int i = -1; i < 17; i++) {
+            packedSwitch7(i);
+        }
+
+
+        System.out.println("sparse");
+        for (int i = -2; i < 4; i++) {
+            sparseSwitch(i);
+        }
+        sparseSwitch(Integer.MIN_VALUE);
+        sparseSwitch(Integer.MAX_VALUE);
+
+        System.out.println("sparse2");
+        for (int i = -2; i < 3; i++) {
+            sparseSwitch2(i);
+        }
+        sparseSwitch2(Integer.MIN_VALUE);
+        sparseSwitch2(Integer.MAX_VALUE);
+
+        System.out.println("sparse3");
+        for (int i = -2; i < 7; i++) {
+            sparseSwitch3(i);
+        }
+        sparseSwitch3(Integer.MIN_VALUE);
+        sparseSwitch3(Integer.MAX_VALUE);
+
+        System.out.println("sparse4");
+        for (int i = Integer.MAX_VALUE - 2; i > 0; i++) {
+            sparseSwitch4(i);
+        }
+        sparseSwitch4(Integer.MIN_VALUE);
+
+        System.out.println("sparse5");
+        for (int i = Integer.MIN_VALUE; i < Integer.MIN_VALUE + 2; i++) {
+            sparseSwitch5(i);
+        }
+        sparseSwitch5(Integer.MAX_VALUE);
+
+        System.out.println("sparse7");
+        for (int i = -1; i < 17; i++) {
+            sparseSwitch7(i);
+        }
+
+        // Older tests.
+
         int a = 1;
 
         switch (a) {