From 66d4fae8b37fd32c399dca390dff231a6e192b59 Mon Sep 17 00:00:00 2001 From: THEMIScale <75557898+THEMIScale@users.noreply.github.com> Date: Tue, 7 Apr 2026 21:21:34 +0800 Subject: [PATCH] numfmt: fix GNU compat issue #11653 & correct test cases (#11695) --- src/uu/numfmt/src/numfmt.rs | 1 - tests/by-util/test_numfmt.rs | 18 +++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/uu/numfmt/src/numfmt.rs b/src/uu/numfmt/src/numfmt.rs index 775c0b4cc..4d5303f5c 100644 --- a/src/uu/numfmt/src/numfmt.rs +++ b/src/uu/numfmt/src/numfmt.rs @@ -413,7 +413,6 @@ pub fn uu_app() -> Command { .about(translate!("numfmt-about")) .after_help(translate!("numfmt-after-help")) .override_usage(format_usage(&translate!("numfmt-usage"))) - .allow_negative_numbers(true) .infer_long_args(true) .arg( Arg::new(DEBUG) diff --git a/tests/by-util/test_numfmt.rs b/tests/by-util/test_numfmt.rs index f7d21e666..22fa8385d 100644 --- a/tests/by-util/test_numfmt.rs +++ b/tests/by-util/test_numfmt.rs @@ -11,10 +11,12 @@ fn test_invalid_arg() { new_ucmd!().arg("--definitely-invalid").fails_with_code(1); } +// This test failed when fixing #11653. +// Add a `--` separator to ensure floats are not rounded(it match the gnu pattern). #[test] fn test_should_not_round_floats() { new_ucmd!() - .args(&["0.99", "1.01", "1.1", "1.22", ".1", "-0.1"]) + .args(&["--", "0.99", "1.01", "1.1", "1.22", ".1", "-0.1"]) .succeeds() .stdout_is("0.99\n1.01\n1.1\n1.22\n0.1\n-0.1\n"); } @@ -1370,12 +1372,22 @@ fn test_null_byte_input_multiline() { // GNU rejects `-9923868` as an invalid short option (leading `-9`) and // requires `--` separator; uutils accepts it as a negative positional number. #[test] -#[ignore = "GNU compat: see uutils/coreutils#11653"] fn test_negative_number_without_double_dash_gnu_compat_issue_11653() { new_ucmd!() .args(&["--to=iec", "-9923868"]) .fails_with_code(1) - .stderr_contains("invalid option"); + .stderr_contains("unexpected argument"); +} + +// https://github.com/uutils/coreutils/issues/11653 +// GNU rejects `-9923868` as an invalid short option (leading `-9`) and +// requires `--` separator; uutils accepts it as a negative positional number. +#[test] +fn test_negative_number_with_double_dash_gnu_compat_issue_11653() { + new_ucmd!() + .args(&["--to=iec", "--", "-9923868"]) + .succeeds() + .stdout_is("-9.5M\n"); } // https://github.com/uutils/coreutils/issues/11654