aboutsummaryrefslogtreecommitdiff
path: root/test/compress/switch.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/compress/switch.js')
-rw-r--r--test/compress/switch.js186
1 files changed, 186 insertions, 0 deletions
diff --git a/test/compress/switch.js b/test/compress/switch.js
new file mode 100644
index 00000000..7c1e021c
--- /dev/null
+++ b/test/compress/switch.js
@@ -0,0 +1,186 @@
+constant_switch_1: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ switch (1+1) {
+ case 1: foo(); break;
+ case 1+1: bar(); break;
+ case 1+1+1: baz(); break;
+ }
+ }
+ expect: {
+ bar();
+ }
+}
+
+constant_switch_2: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ switch (1) {
+ case 1: foo();
+ case 1+1: bar(); break;
+ case 1+1+1: baz();
+ }
+ }
+ expect: {
+ foo();
+ bar();
+ }
+}
+
+constant_switch_3: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ switch (10) {
+ case 1: foo();
+ case 1+1: bar(); break;
+ case 1+1+1: baz();
+ default:
+ def();
+ }
+ }
+ expect: {
+ def();
+ }
+}
+
+constant_switch_4: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ switch (2) {
+ case 1:
+ x();
+ if (foo) break;
+ y();
+ break;
+ case 1+1:
+ bar();
+ default:
+ def();
+ }
+ }
+ expect: {
+ bar();
+ def();
+ }
+}
+
+constant_switch_5: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ switch (1) {
+ case 1:
+ x();
+ if (foo) break;
+ y();
+ break;
+ case 1+1:
+ bar();
+ default:
+ def();
+ }
+ }
+ expect: {
+ // the break inside the if ruins our job
+ // we can still get rid of irrelevant cases.
+ switch (1) {
+ case 1:
+ x();
+ if (foo) break;
+ y();
+ }
+ // XXX: we could optimize this better by inventing an outer
+ // labeled block, but that's kinda tricky.
+ }
+}
+
+constant_switch_6: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ OUT: {
+ foo();
+ switch (1) {
+ case 1:
+ x();
+ if (foo) break OUT;
+ y();
+ case 1+1:
+ bar();
+ break;
+ default:
+ def();
+ }
+ }
+ }
+ expect: {
+ OUT: {
+ foo();
+ x();
+ if (foo) break OUT;
+ y();
+ bar();
+ }
+ }
+}
+
+constant_switch_7: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ OUT: {
+ foo();
+ switch (1) {
+ case 1:
+ x();
+ if (foo) break OUT;
+ for (var x = 0; x < 10; x++) {
+ if (x > 5) break; // this break refers to the for, not to the switch; thus it
+ // shouldn't ruin our optimization
+ console.log(x);
+ }
+ y();
+ case 1+1:
+ bar();
+ break;
+ default:
+ def();
+ }
+ }
+ }
+ expect: {
+ OUT: {
+ foo();
+ x();
+ if (foo) break OUT;
+ for (var x = 0; x < 10; x++) {
+ if (x > 5) break;
+ console.log(x);
+ }
+ y();
+ bar();
+ }
+ }
+}
+
+constant_switch_8: {
+ options = { dead_code: true, evaluate: true };
+ input: {
+ OUT: switch (1) {
+ case 1:
+ x();
+ for (;;) break OUT;
+ y();
+ break;
+ case 1+1:
+ bar();
+ default:
+ def();
+ }
+ }
+ expect: {
+ OUT: switch (1) {
+ case 1:
+ x();
+ for (;;) break OUT;
+ y();
+ }
+ }
+}