diff --git a/src/uu/stat/src/stat.rs b/src/uu/stat/src/stat.rs index e2a0f57ef..38fbc0fec 100644 --- a/src/uu/stat/src/stat.rs +++ b/src/uu/stat/src/stat.rs @@ -193,11 +193,19 @@ impl ScanUtil for str { } pub fn group_num(s: &str) -> Cow { - assert!(s.chars().all(char::is_numeric)); + let is_negative = s.starts_with('-'); + assert!(is_negative || s.chars().take(1).all(|c| c.is_digit(10))); + assert!(s.chars().skip(1).all(|c| c.is_digit(10))); if s.len() < 4 { return s.into(); } let mut res = String::with_capacity((s.len() - 1) / 3); + let s = if is_negative { + res.push('-'); + &s[1..] + } else { + s + }; let mut alone = (s.len() - 1) % 3 + 1; res.push_str(&s[..alone]); while alone != s.len() { diff --git a/tests/by-util/test_stat.rs b/tests/by-util/test_stat.rs index 9bbb1c1ca..dfaaf8add 100644 --- a/tests/by-util/test_stat.rs +++ b/tests/by-util/test_stat.rs @@ -34,6 +34,8 @@ fn test_group_num() { assert_eq!("24", group_num("24")); assert_eq!("4", group_num("4")); assert_eq!("", group_num("")); + assert_eq!("-5", group_num("-5")); + assert_eq!("-1,234", group_num("-1234")); } #[cfg(test)]