aboutsummaryrefslogtreecommitdiff
path: root/test/compress/numbers.js
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-03-03 18:04:32 +0800
committerGitHub <noreply@github.com>2017-03-03 18:04:32 +0800
commit18059cc94fdc037e296a1cb1b08143d5e3aae570 (patch)
treed8b787fba1df5fe5c5052354008084c9f74e58d3 /test/compress/numbers.js
parentb5e0e8c2038c7c0ea13771891eb84f6e6f7bcbc3 (diff)
downloadtracifyjs-18059cc94fdc037e296a1cb1b08143d5e3aae570.tar.gz
tracifyjs-18059cc94fdc037e296a1cb1b08143d5e3aae570.zip
compress numerical expressions (#1513)
safe operations - `a === b` => `a == b` - `a + -b` => `a - b` - `-a + b` => `b - a` - `a+ +b` => `+b+a` associative operations (bit-wise operations are safe, otherwise `unsafe_math`) - `a + (b + c)` => `(a + b) + c` - `(n + 2) + 3` => `5 + n` - `(2 * n) * 3` => `6 * n` - `(a | 1) | (2 | d)` => `(3 | a) | b` fixes #412
Diffstat (limited to 'test/compress/numbers.js')
-rw-r--r--test/compress/numbers.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/test/compress/numbers.js b/test/compress/numbers.js
index 8e32ad02..0b40bb9c 100644
--- a/test/compress/numbers.js
+++ b/test/compress/numbers.js
@@ -17,3 +17,139 @@ hex_numbers_in_parentheses_for_prototype_functions: {
}
expect_exact: "-2;(-2).toFixed(0);2;2..toFixed(0);.2;.2.toFixed(0);2e-8;2e-8.toFixed(0);0xde0b6b3a7640080;(0xde0b6b3a7640080).toFixed(0);"
}
+
+comparisons: {
+ options = {
+ comparisons: true,
+ }
+ input: {
+ console.log(
+ ~x === 42,
+ x % n === 42
+ );
+ }
+ expect: {
+ console.log(
+ 42 == ~x,
+ x % n == 42
+ );
+ }
+}
+
+evaluate_1: {
+ options = {
+ evaluate: true,
+ unsafe_math: false,
+ }
+ input: {
+ console.log(
+ x + 1 + 2,
+ x * 1 * 2,
+ +x + 1 + 2,
+ 1 + x + 2 + 3,
+ 1 | x | 2 | 3,
+ 1 + x-- + 2 + 3,
+ 1 + (x*y + 2) + 3,
+ 1 + (2 + x + 3),
+ 1 + (2 + ~x + 3),
+ -y + (2 + ~x + 3),
+ 1 & (2 & x & 3),
+ 1 + (2 + (x |= 0) + 3)
+ );
+ }
+ expect: {
+ console.log(
+ x + 1 + 2,
+ 1 * x * 2,
+ +x + 1 + 2,
+ 1 + x + 2 + 3,
+ 3 | x,
+ 1 + x-- + 2 + 3,
+ x*y + 2 + 1 + 3,
+ 1 + (2 + x + 3),
+ 2 + ~x + 3 + 1,
+ -y + (2 + ~x + 3),
+ 0 & x,
+ 2 + (x |= 0) + 3 + 1
+ );
+ }
+}
+
+evaluate_2: {
+ options = {
+ evaluate: true,
+ unsafe_math: true,
+ }
+ input: {
+ console.log(
+ x + 1 + 2,
+ x * 1 * 2,
+ +x + 1 + 2,
+ 1 + x + 2 + 3,
+ 1 | x | 2 | 3,
+ 1 + x-- + 2 + 3,
+ 1 + (x*y + 2) + 3,
+ 1 + (2 + x + 3),
+ 1 & (2 & x & 3),
+ 1 + (2 + (x |= 0) + 3)
+ );
+ }
+ expect: {
+ console.log(
+ x + 1 + 2,
+ 2 * x,
+ 3 + +x,
+ 1 + x + 2 + 3,
+ 3 | x,
+ 6 + x--,
+ 6 + x*y,
+ 1 + (2 + x + 3),
+ 0 & x,
+ 6 + (x |= 0)
+ );
+ }
+}
+
+evaluate_3: {
+ options = {
+ evaluate: true,
+ unsafe: true,
+ unsafe_math: true,
+ }
+ input: {
+ console.log(1 + Number(x) + 2);
+ }
+ expect: {
+ console.log(3 + +x);
+ }
+}
+
+evaluate_4: {
+ options = {
+ evaluate: true,
+ }
+ input: {
+ console.log(
+ 1+ +a,
+ +a+1,
+ 1+-a,
+ -a+1,
+ +a+ +b,
+ +a+-b,
+ -a+ +b,
+ -a+-b
+ );
+ }
+ expect: {
+ console.log(
+ +a+1,
+ +a+1,
+ 1-a,
+ 1-a,
+ +a+ +b,
+ +a-b,
+ -a+ +b,
+ -a-b
+ );
+ }
+}