From 5c06dd580b323efac36f70bc48c1e44672229325 Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Fri, 21 Mar 2025 20:00:58 +0100 Subject: [PATCH] uucore: format: extendedbigdecimal: Implement Neg trait This is useful and will simplify some of the parsing logic later. --- .../lib/features/format/extendedbigdecimal.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/uucore/src/lib/features/format/extendedbigdecimal.rs b/src/uucore/src/lib/features/format/extendedbigdecimal.rs index 8c242be9f..b5762e000 100644 --- a/src/uucore/src/lib/features/format/extendedbigdecimal.rs +++ b/src/uucore/src/lib/features/format/extendedbigdecimal.rs @@ -23,6 +23,7 @@ use std::cmp::Ordering; use std::fmt::Display; use std::ops::Add; +use std::ops::Neg; use bigdecimal::BigDecimal; use num_traits::FromPrimitive; @@ -227,6 +228,27 @@ impl PartialOrd for ExtendedBigDecimal { } } +impl Neg for ExtendedBigDecimal { + type Output = Self; + + fn neg(self) -> Self::Output { + match self { + Self::BigDecimal(bd) => { + if bd.is_zero() { + Self::MinusZero + } else { + Self::BigDecimal(bd.neg()) + } + } + Self::MinusZero => Self::BigDecimal(BigDecimal::zero()), + Self::Infinity => Self::MinusInfinity, + Self::MinusInfinity => Self::Infinity, + Self::Nan => Self::MinusNan, + Self::MinusNan => Self::Nan, + } + } +} + #[cfg(test)] mod tests {