From 8a29577cc5bd3842d3bccfdbbffa45e4c9944d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sun, 2 Jun 2024 12:10:55 +0900 Subject: [PATCH] fix(es/minifier): Fix comparison of `-0.0` (#9012) **Related issue:** - Closes #9007 --- crates/swc_ecma_minifier/src/compress/util/mod.rs | 8 ++++---- .../swc_ecma_minifier/tests/fixture/issues/9007/input.js | 4 ++++ .../swc_ecma_minifier/tests/fixture/issues/9007/output.js | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js diff --git a/crates/swc_ecma_minifier/src/compress/util/mod.rs b/crates/swc_ecma_minifier/src/compress/util/mod.rs index eed2bbc304a0..8ed2d15a7831 100644 --- a/crates/swc_ecma_minifier/src/compress/util/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/util/mod.rs @@ -760,12 +760,12 @@ impl Visit for SuperFinder { } fn cmp_num(a: f64, b: f64) -> Ordering { - if a == -0.0 && b == 0.0 { - return Ordering::Greater; + if a == 0.0 && a.is_sign_negative() && b == 0.0 && b.is_sign_positive() { + return Ordering::Less; } - if a == 0.0 && b == -0.0 { - return Ordering::Less; + if a == 0.0 && a.is_sign_positive() && b == 0.0 && b.is_sign_negative() { + return Ordering::Greater; } a.partial_cmp(&b).unwrap() diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js new file mode 100644 index 000000000000..4cb74ed269e6 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/9007/input.js @@ -0,0 +1,4 @@ +console.log(Math.min(-0, 0)) +console.log(Math.min(0, -0)) +console.log(Math.max(-0, 0)) +console.log(Math.max(0, -0)) \ No newline at end of file diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js new file mode 100644 index 000000000000..4861fafca517 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/9007/output.js @@ -0,0 +1 @@ +console.log(-0), console.log(-0), console.log(0), console.log(0);