From e3872e8e8fb145f232dd6c97a4b7cd3e9e9aa95b Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Fri, 7 Mar 2025 12:19:36 +0100 Subject: [PATCH] uucore: format: force NaN back to lowercase Fixes formatting of `NaN` to `nan`. Fixes part 1 of #7412. --- .../src/lib/features/format/num_format.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/uucore/src/lib/features/format/num_format.rs b/src/uucore/src/lib/features/format/num_format.rs index fac733a22..b0dd1b945 100644 --- a/src/uucore/src/lib/features/format/num_format.rs +++ b/src/uucore/src/lib/features/format/num_format.rs @@ -324,8 +324,9 @@ fn get_sign_indicator(sign: PositiveSign, x: &T) -> Str fn format_float_non_finite(f: f64, case: Case) -> String { debug_assert!(!f.is_finite()); let mut s = format!("{f}"); - if case == Case::Uppercase { - s.make_ascii_uppercase(); + match case { + Case::Lowercase => s.make_ascii_lowercase(), // Forces NaN back to nan. + Case::Uppercase => s.make_ascii_uppercase(), } s } @@ -550,6 +551,18 @@ mod test { assert_eq!(f(8), "010"); } + #[test] + fn non_finite_float() { + use super::format_float_non_finite; + let f = |x| format_float_non_finite(x, Case::Lowercase); + assert_eq!(f(f64::NAN), "nan"); + assert_eq!(f(f64::INFINITY), "inf"); + + let f = |x| format_float_non_finite(x, Case::Uppercase); + assert_eq!(f(f64::NAN), "NAN"); + assert_eq!(f(f64::INFINITY), "INF"); + } + #[test] fn decimal_float() { use super::format_float_decimal;