aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/compress/collapse_vars.js114
-rw-r--r--test/compress/drop-unused.js379
2 files changed, 489 insertions, 4 deletions
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index ef7af9ed..d7432f3f 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -338,8 +338,9 @@ collapse_vars_while: {
collapse_vars_do_while: {
options = {
collapse_vars:true, sequences:true, properties:true, dead_code:true, conditionals:true,
- comparisons:true, evaluate:true, booleans:false, loops:false, unused:true, hoist_funs:true,
- keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true
+ comparisons:true, evaluate:true, booleans:false, loops:false, unused:"keep_assign",
+ hoist_funs:true, keep_fargs:true, if_return:true, join_vars:true, cascade:true,
+ side_effects:true
}
input: {
function f1(y) {
@@ -409,6 +410,79 @@ collapse_vars_do_while: {
}
}
+collapse_vars_do_while_drop_assign: {
+ options = {
+ collapse_vars:true, sequences:true, properties:true, dead_code:true, conditionals:true,
+ comparisons:true, evaluate:true, booleans:false, loops:false, unused:true, hoist_funs:true,
+ keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true
+ }
+ input: {
+ function f1(y) {
+ // The constant do-while condition `c` will be replaced.
+ var c = 9;
+ do { } while (c === 77);
+ }
+ function f2(y) {
+ // The non-constant do-while condition `c` will not be replaced.
+ var c = 5 - y;
+ do { } while (c);
+ }
+ function f3(y) {
+ // The constant `x` will be replaced in the do loop body.
+ function fn(n) { console.log(n); }
+ var a = 2, x = 7;
+ do {
+ fn(a = x);
+ break;
+ } while (y);
+ }
+ function f4(y) {
+ // The non-constant `a` will not be replaced in the do loop body.
+ var a = y / 4;
+ do {
+ return a;
+ } while (y);
+ }
+ function f5(y) {
+ function p(x) { console.log(x); }
+ do {
+ // The non-constant `a` will be replaced in p(a)
+ // because it is declared in same block.
+ var a = y - 3;
+ p(a);
+ } while (--y);
+ }
+ }
+ expect: {
+ function f1(y) {
+ do ; while (false);
+ }
+ function f2(y) {
+ var c = 5 - y;
+ do ; while (c);
+ }
+ function f3(y) {
+ function fn(n) { console.log(n); }
+ do {
+ fn(7);
+ break;
+ } while (y);
+ }
+ function f4(y) {
+ var a = y / 4;
+ do
+ return a;
+ while (y);
+ }
+ function f5(y) {
+ function p(x) { console.log(x); }
+ do {
+ p(y - 3);
+ } while (--y);
+ }
+ }
+}
+
collapse_vars_seq: {
options = {
collapse_vars:true, sequences:true, properties:true, dead_code:true, conditionals:true,
@@ -567,8 +641,9 @@ collapse_vars_assignment: {
collapse_vars_lvalues: {
options = {
collapse_vars:true, sequences:true, properties:true, dead_code:true, conditionals:true,
- comparisons:true, evaluate:true, booleans:true, loops:true, unused:true, hoist_funs:true,
- keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true
+ comparisons:true, evaluate:true, booleans:true, loops:true, unused:"keep_assign",
+ hoist_funs:true, keep_fargs:true, if_return:true, join_vars:true, cascade:true,
+ side_effects:true
}
input: {
function f0(x) { var i = ++x; return x += i; }
@@ -593,7 +668,38 @@ collapse_vars_lvalues: {
function f7(x) { var w = e1(), v = e2(), c = v - x; return (w = x) - c; }
function f8(x) { var w = e1(), v = e2(); return (w = x) - (v - x); }
function f9(x) { var w = e1(); return e2() - x - (w = x); }
+ }
+}
+collapse_vars_lvalues_drop_assign: {
+ options = {
+ collapse_vars:true, sequences:true, properties:true, dead_code:true, conditionals:true,
+ comparisons:true, evaluate:true, booleans:true, loops:true, unused:true, hoist_funs:true,
+ keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true
+ }
+ input: {
+ function f0(x) { var i = ++x; return x += i; }
+ function f1(x) { var a = (x -= 3); return x += a; }
+ function f2(x) { var z = x, a = ++z; return z += a; }
+ function f3(x) { var a = (x -= 3), b = x + a; return b; }
+ function f4(x) { var a = (x -= 3); return x + a; }
+ function f5(x) { var w = e1(), v = e2(), c = v = --x, b = w = x; return b - c; }
+ function f6(x) { var w = e1(), v = e2(), c = v = --x, b = w = x; return c - b; }
+ function f7(x) { var w = e1(), v = e2(), c = v - x, b = w = x; return b - c; }
+ function f8(x) { var w = e1(), v = e2(), b = w = x, c = v - x; return b - c; }
+ function f9(x) { var w = e1(), v = e2(), b = w = x, c = v - x; return c - b; }
+ }
+ expect: {
+ function f0(x) { var i = ++x; return x += i; }
+ function f1(x) { var a = (x -= 3); return x += a; }
+ function f2(x) { var z = x, a = ++z; return z += a; }
+ function f3(x) { var a = (x -= 3); return x + a; }
+ function f4(x) { var a = (x -= 3); return x + a; }
+ function f5(x) { var v = (e1(), e2()), c = v = --x; return x - c; }
+ function f6(x) { e1(), e2(); return --x - x; }
+ function f7(x) { var v = (e1(), e2()), c = v - x; return x - c; }
+ function f8(x) { var v = (e1(), e2()); return x - (v - x); }
+ function f9(x) { e1(); return e2() - x - x; }
}
}
diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js
index 035a428e..5620cf40 100644
--- a/test/compress/drop-unused.js
+++ b/test/compress/drop-unused.js
@@ -177,3 +177,382 @@ keep_fnames: {
}
}
}
+
+drop_assign: {
+ options = { unused: true };
+ input: {
+ function f1() {
+ var a;
+ a = 1;
+ }
+ function f2() {
+ var a = 1;
+ a = 2;
+ }
+ function f3(a) {
+ a = 1;
+ }
+ function f4() {
+ var a;
+ return a = 1;
+ }
+ function f5() {
+ var a;
+ return function() {
+ a = 1;
+ }
+ }
+ }
+ expect: {
+ function f1() {
+ 1;
+ }
+ function f2() {
+ 2;
+ }
+ function f3(a) {
+ 1;
+ }
+ function f4() {
+ return 1;
+ }
+ function f5() {
+ var a;
+ return function() {
+ a = 1;
+ }
+ }
+ }
+}
+
+keep_assign: {
+ options = { unused: "keep_assign" };
+ input: {
+ function f1() {
+ var a;
+ a = 1;
+ }
+ function f2() {
+ var a = 1;
+ a = 2;
+ }
+ function f3(a) {
+ a = 1;
+ }
+ function f4() {
+ var a;
+ return a = 1;
+ }
+ function f5() {
+ var a;
+ return function() {
+ a = 1;
+ }
+ }
+ }
+ expect: {
+ function f1() {
+ var a;
+ a = 1;
+ }
+ function f2() {
+ var a = 1;
+ a = 2;
+ }
+ function f3(a) {
+ a = 1;
+ }
+ function f4() {
+ var a;
+ return a = 1;
+ }
+ function f5() {
+ var a;
+ return function() {
+ a = 1;
+ }
+ }
+ }
+}
+
+drop_toplevel_funcs: {
+ options = { toplevel: "funcs", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, b = 1, c = g;
+ a = 2;
+ function g() {}
+ console.log(b = 3);
+ }
+}
+
+drop_toplevel_vars: {
+ options = { toplevel: "vars", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ 2;
+ function g() {}
+ function h() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_vars_fargs: {
+ options = { keep_fargs: false, toplevel: "vars", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var c = g;
+ function f() {
+ return function() {
+ c = 2;
+ }
+ }
+ 2;
+ function g() {}
+ function h() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_all: {
+ options = { toplevel: true, unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ 2;
+ console.log(3);
+ }
+}
+
+drop_toplevel_retain: {
+ options = { top_retain: "f,a,o", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_retain_array: {
+ options = { top_retain: [ "f", "a", "o" ], unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_retain_regex: {
+ options = { top_retain: /^[fao]$/, unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_all_retain: {
+ options = { toplevel: true, top_retain: "f,a,o", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_funcs_retain: {
+ options = { toplevel: "funcs", top_retain: "f,a,o", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ console.log(b = 3);
+ }
+}
+
+drop_toplevel_vars_retain: {
+ options = { toplevel: "vars", top_retain: "f,a,o", unused: true };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(3);
+ }
+}
+
+drop_toplevel_keep_assign: {
+ options = { toplevel: true, unused: "keep_assign" };
+ input: {
+ var a, b = 1, c = g;
+ function f(d) {
+ return function() {
+ c = 2;
+ }
+ }
+ a = 2;
+ function g() {}
+ function h() {}
+ console.log(b = 3);
+ }
+ expect: {
+ var a, b = 1;
+ a = 2;
+ console.log(b = 3);
+ }
+}