summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-12-11 00:58:13 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-12-11 00:58:13 +0000
commit3e465bec65067ebfdf662469cf85dd82cd077bdd (patch)
treebe96360e987a26b73970bddc4efdbc0e767c27cc
parent4381cd6760b5b0b772322b2257bc2ced5d05da5d (diff)
parent912430c96bb03ee8900ce18feb85268a96d015b7 (diff)
downloadart-3e465bec65067ebfdf662469cf85dd82cd077bdd.zip
art-3e465bec65067ebfdf662469cf85dd82cd077bdd.tar.gz
art-3e465bec65067ebfdf662469cf85dd82cd077bdd.tar.bz2
Merge "ART: Extend run-test 015"
-rw-r--r--test/015-switch/expected.txt116
-rw-r--r--test/015-switch/src/Main.java331
2 files changed, 447 insertions, 0 deletions
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) {