From 2103646ff73a6536da3a4b50a475302a6b2537bf Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Wed, 5 Mar 2025 10:04:50 +0100 Subject: [PATCH] seq: Move extendedbigdecimal.rs to uucore/features/format Will make it possible to directly print ExtendedBigDecimal in `seq`, and gradually get rid of limited f64 precision in other tools (e.g. `printf`). Changes are mostly mechanical, we reexport ExtendedBigDecimal directly in format to keep the imports slightly shorter. --- Cargo.lock | 2 ++ src/uu/seq/src/hexadecimalfloat.rs | 2 +- src/uu/seq/src/number.rs | 2 +- src/uu/seq/src/numberparse.rs | 4 ++-- src/uu/seq/src/seq.rs | 4 +--- src/uucore/Cargo.toml | 6 ++++-- .../src/lib/features/format}/extendedbigdecimal.rs | 5 ++--- src/uucore/src/lib/features/format/mod.rs | 2 ++ 8 files changed, 15 insertions(+), 12 deletions(-) rename src/{uu/seq/src => uucore/src/lib/features/format}/extendedbigdecimal.rs (98%) diff --git a/Cargo.lock b/Cargo.lock index 94dc34865..202c0e1da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3504,6 +3504,7 @@ dependencies = [ name = "uucore" version = "0.0.30" dependencies = [ + "bigdecimal", "blake2b_simd", "blake3", "chrono", @@ -3523,6 +3524,7 @@ dependencies = [ "md-5", "memchr", "nix", + "num-traits", "number_prefix", "os_display", "regex", diff --git a/src/uu/seq/src/hexadecimalfloat.rs b/src/uu/seq/src/hexadecimalfloat.rs index e98074dd9..de89f172e 100644 --- a/src/uu/seq/src/hexadecimalfloat.rs +++ b/src/uu/seq/src/hexadecimalfloat.rs @@ -3,11 +3,11 @@ // For the full copyright and license information, please view the LICENSE // file that was distributed with this source code. // spell-checker:ignore extendedbigdecimal bigdecimal hexdigit numberparse -use crate::extendedbigdecimal::ExtendedBigDecimal; use crate::number::PreciseNumber; use crate::numberparse::ParseNumberError; use bigdecimal::BigDecimal; use num_traits::FromPrimitive; +use uucore::format::ExtendedBigDecimal; /// The base of the hex number system const HEX_RADIX: u32 = 16; diff --git a/src/uu/seq/src/number.rs b/src/uu/seq/src/number.rs index ec6ac0f16..bbd5a9564 100644 --- a/src/uu/seq/src/number.rs +++ b/src/uu/seq/src/number.rs @@ -5,7 +5,7 @@ // spell-checker:ignore extendedbigdecimal use num_traits::Zero; -use crate::extendedbigdecimal::ExtendedBigDecimal; +use uucore::format::ExtendedBigDecimal; /// A number with a specified number of integer and fractional digits. /// diff --git a/src/uu/seq/src/numberparse.rs b/src/uu/seq/src/numberparse.rs index d00db16fa..47a9d130d 100644 --- a/src/uu/seq/src/numberparse.rs +++ b/src/uu/seq/src/numberparse.rs @@ -15,9 +15,9 @@ use num_bigint::Sign; use num_traits::Num; use num_traits::Zero; -use crate::extendedbigdecimal::ExtendedBigDecimal; use crate::hexadecimalfloat; use crate::number::PreciseNumber; +use uucore::format::ExtendedBigDecimal; /// An error returned when parsing a number fails. #[derive(Debug, PartialEq, Eq)] @@ -381,8 +381,8 @@ impl FromStr for PreciseNumber { #[cfg(test)] mod tests { use bigdecimal::BigDecimal; + use uucore::format::ExtendedBigDecimal; - use crate::extendedbigdecimal::ExtendedBigDecimal; use crate::number::PreciseNumber; use crate::numberparse::ParseNumberError; diff --git a/src/uu/seq/src/seq.rs b/src/uu/seq/src/seq.rs index 08b989815..0c19a28c1 100644 --- a/src/uu/seq/src/seq.rs +++ b/src/uu/seq/src/seq.rs @@ -10,11 +10,10 @@ use clap::{Arg, ArgAction, Command}; use num_traits::{ToPrimitive, Zero}; use uucore::error::{FromIo, UResult}; -use uucore::format::{num_format, sprintf, Format, FormatArgument}; +use uucore::format::{num_format, sprintf, ExtendedBigDecimal, Format, FormatArgument}; use uucore::{format_usage, help_about, help_usage}; mod error; -mod extendedbigdecimal; mod hexadecimalfloat; // public to allow fuzzing @@ -24,7 +23,6 @@ pub mod number; mod number; mod numberparse; use crate::error::SeqError; -use crate::extendedbigdecimal::ExtendedBigDecimal; use crate::number::PreciseNumber; const ABOUT: &str = help_about!("seq.md"); diff --git a/src/uucore/Cargo.toml b/src/uucore/Cargo.toml index 522e9249f..71e64dc2a 100644 --- a/src/uucore/Cargo.toml +++ b/src/uucore/Cargo.toml @@ -1,4 +1,4 @@ -# spell-checker:ignore (features) zerocopy +# spell-checker:ignore (features) bigdecimal zerocopy [package] name = "uucore" @@ -58,6 +58,8 @@ blake3 = { workspace = true, optional = true } sm3 = { workspace = true, optional = true } crc32fast = { workspace = true, optional = true } regex = { workspace = true, optional = true } +bigdecimal = { workspace = true, optional = true } +num-traits = { workspace = true, optional = true } [target.'cfg(unix)'.dependencies] walkdir = { workspace = true, optional = true } @@ -94,7 +96,7 @@ fs = ["dunce", "libc", "winapi-util", "windows-sys"] fsext = ["libc", "windows-sys"] fsxattr = ["xattr"] lines = [] -format = ["itertools", "quoting-style"] +format = ["bigdecimal", "itertools", "num-traits", "quoting-style"] mode = ["libc"] perms = ["entries", "libc", "walkdir"] buf-copy = [] diff --git a/src/uu/seq/src/extendedbigdecimal.rs b/src/uucore/src/lib/features/format/extendedbigdecimal.rs similarity index 98% rename from src/uu/seq/src/extendedbigdecimal.rs rename to src/uucore/src/lib/features/format/extendedbigdecimal.rs index 4f9a04152..8374249a7 100644 --- a/src/uu/seq/src/extendedbigdecimal.rs +++ b/src/uucore/src/lib/features/format/extendedbigdecimal.rs @@ -2,7 +2,7 @@ // // For the full copyright and license information, please view the LICENSE // file that was distributed with this source code. -// spell-checker:ignore bigdecimal extendedbigdecimal extendedbigint +// spell-checker:ignore bigdecimal extendedbigdecimal //! An arbitrary precision float that can also represent infinity, NaN, etc. //! //! The finite values are stored as [`BigDecimal`] instances. Because @@ -68,7 +68,6 @@ pub enum ExtendedBigDecimal { } impl ExtendedBigDecimal { - #[cfg(test)] pub fn zero() -> Self { Self::BigDecimal(0.into()) } @@ -197,7 +196,7 @@ mod tests { use bigdecimal::BigDecimal; use num_traits::Zero; - use crate::extendedbigdecimal::ExtendedBigDecimal; + use crate::format::extendedbigdecimal::ExtendedBigDecimal; #[test] fn test_addition_infinity() { diff --git a/src/uucore/src/lib/features/format/mod.rs b/src/uucore/src/lib/features/format/mod.rs index a9cac7739..059558e49 100644 --- a/src/uucore/src/lib/features/format/mod.rs +++ b/src/uucore/src/lib/features/format/mod.rs @@ -32,12 +32,14 @@ mod argument; mod escape; +pub mod extendedbigdecimal; pub mod human; pub mod num_format; pub mod num_parser; mod spec; pub use argument::*; +pub use extendedbigdecimal::ExtendedBigDecimal; pub use spec::Spec; use std::{ error::Error,