diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-04-01 03:02:14 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-01 03:02:14 +0800 |
commit | 257ddc3bdb37efdb48fc23371f5f523e2044afd8 (patch) | |
tree | 8b91508961f0acd7c43db5a0e08dc8f932df4a55 /test | |
parent | 1ddc05725d078ccf73d711e376c3c530cd517cdb (diff) | |
download | tracifyjs-257ddc3bdb37efdb48fc23371f5f523e2044afd8.tar.gz tracifyjs-257ddc3bdb37efdb48fc23371f5f523e2044afd8.zip |
improve compression of undefined, NaN & Infinitiy (#1748)
- migrate transformation logic from `OutputStream` to `Compressor`
- always turn `undefined` into `void 0` (unless `unsafe`)
- always keep `NaN` except when avoiding local variable redefinition
- introduce `keep_infinity` to suppress `1/0` transform, except when avoiding local variable redefinition
supersedes #1723
fixes #1730
Diffstat (limited to 'test')
-rw-r--r-- | test/compress/conditionals.js | 8 | ||||
-rw-r--r-- | test/compress/evaluate.js | 8 | ||||
-rw-r--r-- | test/compress/issue-1105.js | 68 | ||||
-rw-r--r-- | test/compress/issue-597.js | 32 | ||||
-rw-r--r-- | test/compress/numbers.js | 2 | ||||
-rw-r--r-- | test/compress/properties.js | 2 |
6 files changed, 107 insertions, 13 deletions
diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js index 54d4264d..e7ea2bb2 100644 --- a/test/compress/conditionals.js +++ b/test/compress/conditionals.js @@ -840,8 +840,8 @@ equality_conditionals_false: { f(0, true, 0), f(1, 2, 3), f(1, null, 3), - f(0/0), - f(0/0, "foo"); + f(NaN), + f(NaN, "foo"); } expect_stdout: true } @@ -888,8 +888,8 @@ equality_conditionals_true: { f(0, true, 0), f(1, 2, 3), f(1, null, 3), - f(0/0), - f(0/0, "foo"); + f(NaN), + f(NaN, "foo"); } expect_stdout: true } diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index 35b6b925..0d26e749 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -52,7 +52,7 @@ and: { a = 7; a = false; - a = 0/0; + a = NaN; a = 0; a = void 0; a = null; @@ -67,7 +67,7 @@ and: { a = 6 << condition && -4.5; a = condition && false; - a = console.log("b") && 0/0; + a = console.log("b") && NaN; a = console.log("c") && 0; a = 2 * condition && void 0; a = condition + 3 && null; @@ -149,7 +149,7 @@ or: { a = 6 << condition || -4.5; a = condition || false; - a = console.log("b") || 0/0; + a = console.log("b") || NaN; a = console.log("c") || 0; a = 2 * condition || void 0; a = condition + 3 || null; @@ -533,7 +533,7 @@ unsafe_array: { [1, 2, 3, a][0] + 1, 2, 3, - 0/0, + NaN, "1,21", 5, (void 0)[1] + 1 diff --git a/test/compress/issue-1105.js b/test/compress/issue-1105.js index f9412165..ea957930 100644 --- a/test/compress/issue-1105.js +++ b/test/compress/issue-1105.js @@ -193,6 +193,7 @@ assorted_Infinity_NaN_undefined_in_with_scope: { cascade: true, side_effects: true, sequences: false, + keep_infinity: false, } input: { var f = console.log; @@ -224,10 +225,73 @@ assorted_Infinity_NaN_undefined_in_with_scope: { }; if (o) { f(void 0, void 0); - f(0/0, 0/0); + f(NaN, NaN); f(1/0, 1/0); f(-1/0, -1/0); - f(0/0, 0/0); + f(NaN, NaN); + } + with (o) { + f(undefined, void 0); + f(NaN, 0/0); + f(Infinity, 1/0); + f(-Infinity, -1/0); + f(9 + undefined, 9 + void 0); + } + } + expect_stdout: true +} + +assorted_Infinity_NaN_undefined_in_with_scope_keep_infinity: { + options = { + unused: true, + evaluate: true, + dead_code: true, + conditionals: true, + comparisons: true, + booleans: true, + hoist_funs: true, + keep_fargs: true, + if_return: true, + join_vars: true, + cascade: true, + side_effects: true, + sequences: false, + keep_infinity: true, + } + input: { + var f = console.log; + var o = { + undefined : 3, + NaN : 4, + Infinity : 5, + }; + if (o) { + f(undefined, void 0); + f(NaN, 0/0); + f(Infinity, 1/0); + f(-Infinity, -(1/0)); + f(2 + 7 + undefined, 2 + 7 + void 0); + } + with (o) { + f(undefined, void 0); + f(NaN, 0/0); + f(Infinity, 1/0); + f(-Infinity, -(1/0)); + f(2 + 7 + undefined, 2 + 7 + void 0); + } + } + expect: { + var f = console.log, o = { + undefined : 3, + NaN : 4, + Infinity : 5 + }; + if (o) { + f(void 0, void 0); + f(NaN, NaN); + f(Infinity, 1/0); + f(-Infinity, -1/0); + f(NaN, NaN); } with (o) { f(undefined, void 0); diff --git a/test/compress/issue-597.js b/test/compress/issue-597.js index 987bcacc..143fcc22 100644 --- a/test/compress/issue-597.js +++ b/test/compress/issue-597.js @@ -6,7 +6,7 @@ NaN_and_Infinity_must_have_parens: { } expect: { (1/0).toString(); - (0/0).toString(); + NaN.toString(); } } @@ -24,6 +24,36 @@ NaN_and_Infinity_should_not_be_replaced_when_they_are_redefined: { } } +NaN_and_Infinity_must_have_parens_evaluate: { + options = { + evaluate: true, + } + input: { + (123456789 / 0).toString(); + (+"foo").toString(); + } + expect: { + (1/0).toString(); + NaN.toString(); + } +} + +NaN_and_Infinity_should_not_be_replaced_when_they_are_redefined_evaluate: { + options = { + evaluate: true, + } + input: { + var Infinity, NaN; + (123456789 / 0).toString(); + (+"foo").toString(); + } + expect: { + var Infinity, NaN; + (1/0).toString(); + (0/0).toString(); + } +} + beautify_off_1: { options = { evaluate: true, diff --git a/test/compress/numbers.js b/test/compress/numbers.js index 946a7f2d..86545fba 100644 --- a/test/compress/numbers.js +++ b/test/compress/numbers.js @@ -186,7 +186,7 @@ unary_binary_parenthesis: { }); } expect: { - var v = [ 0, 1, 0/0, 1/0, null, void 0, true, false, "", "foo", /foo/ ]; + var v = [ 0, 1, NaN, 1/0, null, void 0, true, false, "", "foo", /foo/ ]; v.forEach(function(x) { v.forEach(function(y) { console.log( diff --git a/test/compress/properties.js b/test/compress/properties.js index 376fb9e2..29bdfe2a 100644 --- a/test/compress/properties.js +++ b/test/compress/properties.js @@ -77,7 +77,7 @@ sub_properties: { a[3.14] = 3; a.if = 4; a["foo bar"] = 5; - a[0/0] = 6; + a[NaN] = 6; a[null] = 7; a[void 0] = 8; } |