From 714ee5e582eb2314bc04b99988cf7be792b727fd Mon Sep 17 00:00:00 2001 From: tison Date: Thu, 11 Jun 2026 00:17:46 +0800 Subject: [PATCH 1/4] test: code tidy and improve display Signed-off-by: tison --- bsize/src/display.rs | 93 +++++++++++++++++++++++++++++++++++++++++++- bsize/src/lib.rs | 8 +++- bsize/src/parse.rs | 2 - 3 files changed, 98 insertions(+), 5 deletions(-) diff --git a/bsize/src/display.rs b/bsize/src/display.rs index c05f6fb..13c07b8 100644 --- a/bsize/src/display.rs +++ b/bsize/src/display.rs @@ -111,7 +111,7 @@ impl fmt::Display for Display { write!( f, "{:.precision$}{unit_separator}{unit_prefix}{unit_suffix}", - size / unit.pow(exp as u32) as f64, + ideal_size, )?; } @@ -133,3 +133,94 @@ macro_rules! impl_display { } impl_display!(u8, u16, u32, u64, usize); + +#[cfg(test)] +mod tests { + use alloc::format; + use alloc::string::ToString; + + use super::*; + + #[test] + fn test_formatting_equivalence() { + let test_values = [ + 0u64, + 1, + 500, + 999, + 1000, + 1023, + 1024, + 1025, + 1500, + 2048, + 1000000, + 1048576, + 987654321, + 1099511627776, + 1125899906842624, + 1152921504606846976, + u64::MAX - 1, + u64::MAX, + ]; + + for &bytes in &test_values { + for mode in [DisplayMode::Binary, DisplayMode::Decimal] { + let display = Display { + size: bytes, + mode: mode.clone(), + }; + let formatted_new = display.to_string(); + + let formatted_old = format_old(bytes, &mode); + + assert_eq!( + formatted_new, formatted_old, + "formatting mismatch for bytes={bytes} in mode={mode:?}", + ); + } + } + } + + fn format_old(bytes: u64, mode: &DisplayMode) -> alloc::string::String { + let unit = match mode { + DisplayMode::Binary => 1024, + DisplayMode::Decimal => 1000, + }; + + let unit_prefixes = match mode { + DisplayMode::Binary => b"KMGTPE", + DisplayMode::Decimal => b"kMGTPE", + }; + let unit_suffix = match mode { + DisplayMode::Binary => "iB", + DisplayMode::Decimal => "B", + }; + let unit_separator = " "; + let precision = 1; + + if bytes < unit { + format!("{bytes}{unit_separator}B") + } else { + let size = bytes as f64; + + let mut ideal_prefix = 0usize; + let mut ideal_size = size; + loop { + ideal_prefix += 1; + ideal_size /= unit as f64; + + if ideal_size < unit as f64 { + break; + } + } + let exp = ideal_prefix; + let unit_prefix = unit_prefixes[exp - 1] as char; + + format!( + "{:.precision$}{unit_separator}{unit_prefix}{unit_suffix}", + size / unit.pow(exp as u32) as f64, + ) + } + } +} diff --git a/bsize/src/lib.rs b/bsize/src/lib.rs index fdded02..3f0a910 100644 --- a/bsize/src/lib.rs +++ b/bsize/src/lib.rs @@ -12,6 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +#![cfg_attr(docsrs, feature(doc_cfg))] +#![deny(missing_docs)] + //! `BSize` provides multiple semantic wrappers and utilities for byte size representations. //! //! # Features @@ -72,10 +75,11 @@ //! println!("{size}"); //! ``` -#![cfg_attr(docsrs, feature(doc_cfg))] -#![deny(missing_docs)] #![no_std] +#[cfg(test)] // no-alloc; only used for tests +extern crate alloc; + mod display; mod ops; mod parse; diff --git a/bsize/src/parse.rs b/bsize/src/parse.rs index c47a2b5..7800783 100644 --- a/bsize/src/parse.rs +++ b/bsize/src/parse.rs @@ -199,8 +199,6 @@ fn parse_size(mut src: &[u8]) -> Result { #[cfg(test)] mod tests { - extern crate alloc; - use alloc::string::ToString; use super::*; From 1fa808d640e6ac463a2fee3f65782b233ffd7e18 Mon Sep 17 00:00:00 2001 From: tison Date: Thu, 11 Jun 2026 00:20:12 +0800 Subject: [PATCH 2/4] use insta Signed-off-by: tison --- Cargo.lock | 332 ++++++++++++++++++++++++++++++++++++++++++- bsize/Cargo.toml | 7 +- bsize/src/display.rs | 101 +++++++------ 3 files changed, 385 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4ca9db7..4178e52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,16 +52,35 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "bitflags" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" + [[package]] name = "bsize" version = "0.1.0-rc.5" dependencies = [ + "insta", "serde", "serde_core", "serde_json", "toml", ] +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + [[package]] name = "clap" version = "4.6.1" @@ -108,12 +127,73 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +[[package]] +name = "console" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87" +dependencies = [ + "encode_unicode", + "libc", + "windows-sys", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + [[package]] name = "hashbrown" version = "0.17.1" @@ -126,6 +206,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "indexmap" version = "2.14.0" @@ -133,7 +219,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "insta" +version = "1.47.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4a6248eb93a4401ed2f37dfe8ea592d3cf05b7cf4f8efa867b6895af7e094e" +dependencies = [ + "console", + "once_cell", + "similar", + "tempfile", ] [[package]] @@ -148,24 +248,58 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "log" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" + [[package]] name = "memchr" version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + [[package]] name = "once_cell_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -184,6 +318,31 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" version = "1.0.228" @@ -236,6 +395,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "similar" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" + [[package]] name = "strsim" version = "0.11.1" @@ -253,6 +418,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + [[package]] name = "toml" version = "1.1.2+spec-1.1.0" @@ -298,12 +476,70 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen 0.46.0", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "which" version = "8.0.3" @@ -334,6 +570,100 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + [[package]] name = "x" version = "0.0.0" diff --git a/bsize/Cargo.toml b/bsize/Cargo.toml index 53236da..7726982 100644 --- a/bsize/Cargo.toml +++ b/bsize/Cargo.toml @@ -40,9 +40,10 @@ serde = ["dep:serde_core"] serde_core = { version = "1", default-features = false, optional = true } [dev-dependencies] -serde = { version = "1", features = ["derive"] } -serde_json = { version = "1" } -toml = { version = "1.1" } +insta = { version = "1.47.2" } +serde = { version = "1.0.228", features = ["derive"] } +serde_json = { version = "1.0.150" } +toml = { version = "1.1.2+spec-1.1.0" } [lints] workspace = true diff --git a/bsize/src/display.rs b/bsize/src/display.rs index 13c07b8..3e64d4d 100644 --- a/bsize/src/display.rs +++ b/bsize/src/display.rs @@ -136,13 +136,15 @@ impl_display!(u8, u16, u32, u64, usize); #[cfg(test)] mod tests { + extern crate alloc; + use alloc::format; use alloc::string::ToString; use super::*; #[test] - fn test_formatting_equivalence() { + fn test_formatting_snapshots() { let test_values = [ 0u64, 1, @@ -164,63 +166,60 @@ mod tests { u64::MAX, ]; + let mut results = alloc::string::String::new(); for &bytes in &test_values { for mode in [DisplayMode::Binary, DisplayMode::Decimal] { - let display = Display { + let disp = Display { size: bytes, mode: mode.clone(), }; - let formatted_new = display.to_string(); - - let formatted_old = format_old(bytes, &mode); - - assert_eq!( - formatted_new, formatted_old, - "formatting mismatch for bytes={bytes} in mode={mode:?}", - ); + let formatted = disp.to_string(); + let mode_str = match mode { + DisplayMode::Binary => "Binary", + DisplayMode::Decimal => "Decimal", + }; + let line = format!("{bytes:>20} ({mode_str:<7}) => {formatted}\n"); + results.push_str(&line); } } - } - - fn format_old(bytes: u64, mode: &DisplayMode) -> alloc::string::String { - let unit = match mode { - DisplayMode::Binary => 1024, - DisplayMode::Decimal => 1000, - }; - - let unit_prefixes = match mode { - DisplayMode::Binary => b"KMGTPE", - DisplayMode::Decimal => b"kMGTPE", - }; - let unit_suffix = match mode { - DisplayMode::Binary => "iB", - DisplayMode::Decimal => "B", - }; - let unit_separator = " "; - let precision = 1; - - if bytes < unit { - format!("{bytes}{unit_separator}B") - } else { - let size = bytes as f64; - - let mut ideal_prefix = 0usize; - let mut ideal_size = size; - loop { - ideal_prefix += 1; - ideal_size /= unit as f64; - if ideal_size < unit as f64 { - break; - } - } - let exp = ideal_prefix; - let unit_prefix = unit_prefixes[exp - 1] as char; - - format!( - "{:.precision$}{unit_separator}{unit_prefix}{unit_suffix}", - size / unit.pow(exp as u32) as f64, - ) - } + insta::assert_snapshot!(results, @" + 0 (Binary ) => 0 B + 0 (Decimal) => 0 B + 1 (Binary ) => 1 B + 1 (Decimal) => 1 B + 500 (Binary ) => 500 B + 500 (Decimal) => 500 B + 999 (Binary ) => 999 B + 999 (Decimal) => 999 B + 1000 (Binary ) => 1000 B + 1000 (Decimal) => 1.0 kB + 1023 (Binary ) => 1023 B + 1023 (Decimal) => 1.0 kB + 1024 (Binary ) => 1.0 KiB + 1024 (Decimal) => 1.0 kB + 1025 (Binary ) => 1.0 KiB + 1025 (Decimal) => 1.0 kB + 1500 (Binary ) => 1.5 KiB + 1500 (Decimal) => 1.5 kB + 2048 (Binary ) => 2.0 KiB + 2048 (Decimal) => 2.0 kB + 1000000 (Binary ) => 976.6 KiB + 1000000 (Decimal) => 1.0 MB + 1048576 (Binary ) => 1.0 MiB + 1048576 (Decimal) => 1.0 MB + 987654321 (Binary ) => 941.9 MiB + 987654321 (Decimal) => 987.7 MB + 1099511627776 (Binary ) => 1.0 TiB + 1099511627776 (Decimal) => 1.1 TB + 1125899906842624 (Binary ) => 1.0 PiB + 1125899906842624 (Decimal) => 1.1 PB + 1152921504606846976 (Binary ) => 1.0 EiB + 1152921504606846976 (Decimal) => 1.2 EB + 18446744073709551614 (Binary ) => 16.0 EiB + 18446744073709551614 (Decimal) => 18.4 EB + 18446744073709551615 (Binary ) => 16.0 EiB + 18446744073709551615 (Decimal) => 18.4 EB + "); } } From c477b9447f651a52fdbacb424e59b3468e23c80e Mon Sep 17 00:00:00 2001 From: tison Date: Thu, 11 Jun 2026 00:24:52 +0800 Subject: [PATCH 3/4] fixup Signed-off-by: tison --- bsize/src/display.rs | 119 +++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 79 deletions(-) diff --git a/bsize/src/display.rs b/bsize/src/display.rs index 3e64d4d..9b13200 100644 --- a/bsize/src/display.rs +++ b/bsize/src/display.rs @@ -136,90 +136,51 @@ impl_display!(u8, u16, u32, u64, usize); #[cfg(test)] mod tests { - extern crate alloc; - - use alloc::format; - use alloc::string::ToString; - use super::*; #[test] fn test_formatting_snapshots() { - let test_values = [ - 0u64, - 1, - 500, - 999, - 1000, - 1023, - 1024, - 1025, - 1500, - 2048, - 1000000, - 1048576, - 987654321, - 1099511627776, - 1125899906842624, - 1152921504606846976, - u64::MAX - 1, - u64::MAX, - ]; - - let mut results = alloc::string::String::new(); - for &bytes in &test_values { - for mode in [DisplayMode::Binary, DisplayMode::Decimal] { - let disp = Display { - size: bytes, - mode: mode.clone(), - }; - let formatted = disp.to_string(); - let mode_str = match mode { - DisplayMode::Binary => "Binary", - DisplayMode::Decimal => "Decimal", - }; - let line = format!("{bytes:>20} ({mode_str:<7}) => {formatted}\n"); - results.push_str(&line); - } + use DisplayMode::*; + + fn display(size: u64, mode: DisplayMode) -> Display { + Display { size, mode } } - insta::assert_snapshot!(results, @" - 0 (Binary ) => 0 B - 0 (Decimal) => 0 B - 1 (Binary ) => 1 B - 1 (Decimal) => 1 B - 500 (Binary ) => 500 B - 500 (Decimal) => 500 B - 999 (Binary ) => 999 B - 999 (Decimal) => 999 B - 1000 (Binary ) => 1000 B - 1000 (Decimal) => 1.0 kB - 1023 (Binary ) => 1023 B - 1023 (Decimal) => 1.0 kB - 1024 (Binary ) => 1.0 KiB - 1024 (Decimal) => 1.0 kB - 1025 (Binary ) => 1.0 KiB - 1025 (Decimal) => 1.0 kB - 1500 (Binary ) => 1.5 KiB - 1500 (Decimal) => 1.5 kB - 2048 (Binary ) => 2.0 KiB - 2048 (Decimal) => 2.0 kB - 1000000 (Binary ) => 976.6 KiB - 1000000 (Decimal) => 1.0 MB - 1048576 (Binary ) => 1.0 MiB - 1048576 (Decimal) => 1.0 MB - 987654321 (Binary ) => 941.9 MiB - 987654321 (Decimal) => 987.7 MB - 1099511627776 (Binary ) => 1.0 TiB - 1099511627776 (Decimal) => 1.1 TB - 1125899906842624 (Binary ) => 1.0 PiB - 1125899906842624 (Decimal) => 1.1 PB - 1152921504606846976 (Binary ) => 1.0 EiB - 1152921504606846976 (Decimal) => 1.2 EB - 18446744073709551614 (Binary ) => 16.0 EiB - 18446744073709551614 (Decimal) => 18.4 EB - 18446744073709551615 (Binary ) => 16.0 EiB - 18446744073709551615 (Decimal) => 18.4 EB - "); + insta::assert_snapshot!(display(0, Binary), @"0 B"); + insta::assert_snapshot!(display(0, Decimal), @"0 B"); + insta::assert_snapshot!(display(1, Binary), @"1 B"); + insta::assert_snapshot!(display(1, Decimal), @"1 B"); + insta::assert_snapshot!(display(500, Binary), @"500 B"); + insta::assert_snapshot!(display(500, Decimal), @"500 B"); + insta::assert_snapshot!(display(999, Binary), @"999 B"); + insta::assert_snapshot!(display(999, Decimal), @"999 B"); + insta::assert_snapshot!(display(1000, Binary), @"1000 B"); + insta::assert_snapshot!(display(1000, Decimal), @"1.0 kB"); + insta::assert_snapshot!(display(1023, Binary), @"1023 B"); + insta::assert_snapshot!(display(1023, Decimal), @"1.0 kB"); + insta::assert_snapshot!(display(1024, Binary), @"1.0 KiB"); + insta::assert_snapshot!(display(1024, Decimal), @"1.0 kB"); + insta::assert_snapshot!(display(1025, Binary), @"1.0 KiB"); + insta::assert_snapshot!(display(1025, Decimal), @"1.0 kB"); + insta::assert_snapshot!(display(1500, Binary), @"1.5 KiB"); + insta::assert_snapshot!(display(1500, Decimal), @"1.5 kB"); + insta::assert_snapshot!(display(2048, Binary), @"2.0 KiB"); + insta::assert_snapshot!(display(2048, Decimal), @"2.0 kB"); + insta::assert_snapshot!(display(1_000_000, Binary), @"976.6 KiB"); + insta::assert_snapshot!(display(1_000_000, Decimal), @"1.0 MB"); + insta::assert_snapshot!(display(1_048_576, Binary), @"1.0 MiB"); + insta::assert_snapshot!(display(1_048_576, Decimal), @"1.0 MB"); + insta::assert_snapshot!(display(987_654_321, Binary), @"941.9 MiB"); + insta::assert_snapshot!(display(987_654_321, Decimal), @"987.7 MB"); + insta::assert_snapshot!(display(1_099_511_627_776, Binary), @"1.0 TiB"); + insta::assert_snapshot!(display(1_099_511_627_776, Decimal), @"1.1 TB"); + insta::assert_snapshot!(display(1_125_899_906_842_624, Binary), @"1.0 PiB"); + insta::assert_snapshot!(display(1_125_899_906_842_624, Decimal), @"1.1 PB"); + insta::assert_snapshot!(display(1_152_921_504_606_846_976, Binary), @"1.0 EiB"); + insta::assert_snapshot!(display(1_152_921_504_606_846_976, Decimal), @"1.2 EB"); + insta::assert_snapshot!(display(u64::MAX - 1, Binary), @"16.0 EiB"); + insta::assert_snapshot!(display(u64::MAX - 1, Decimal), @"18.4 EB"); + insta::assert_snapshot!(display(u64::MAX, Binary), @"16.0 EiB"); + insta::assert_snapshot!(display(u64::MAX, Decimal), @"18.4 EB"); } } From f2fdd6213047e071511e5120dede1e9267552842 Mon Sep 17 00:00:00 2001 From: tison Date: Thu, 11 Jun 2026 00:28:25 +0800 Subject: [PATCH 4/4] tidy Signed-off-by: tison --- bsize/src/display.rs | 74 +++++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/bsize/src/display.rs b/bsize/src/display.rs index 9b13200..a2618ad 100644 --- a/bsize/src/display.rs +++ b/bsize/src/display.rs @@ -136,6 +136,8 @@ impl_display!(u8, u16, u32, u64, usize); #[cfg(test)] mod tests { + use insta::assert_snapshot; + use super::*; #[test] @@ -146,41 +148,41 @@ mod tests { Display { size, mode } } - insta::assert_snapshot!(display(0, Binary), @"0 B"); - insta::assert_snapshot!(display(0, Decimal), @"0 B"); - insta::assert_snapshot!(display(1, Binary), @"1 B"); - insta::assert_snapshot!(display(1, Decimal), @"1 B"); - insta::assert_snapshot!(display(500, Binary), @"500 B"); - insta::assert_snapshot!(display(500, Decimal), @"500 B"); - insta::assert_snapshot!(display(999, Binary), @"999 B"); - insta::assert_snapshot!(display(999, Decimal), @"999 B"); - insta::assert_snapshot!(display(1000, Binary), @"1000 B"); - insta::assert_snapshot!(display(1000, Decimal), @"1.0 kB"); - insta::assert_snapshot!(display(1023, Binary), @"1023 B"); - insta::assert_snapshot!(display(1023, Decimal), @"1.0 kB"); - insta::assert_snapshot!(display(1024, Binary), @"1.0 KiB"); - insta::assert_snapshot!(display(1024, Decimal), @"1.0 kB"); - insta::assert_snapshot!(display(1025, Binary), @"1.0 KiB"); - insta::assert_snapshot!(display(1025, Decimal), @"1.0 kB"); - insta::assert_snapshot!(display(1500, Binary), @"1.5 KiB"); - insta::assert_snapshot!(display(1500, Decimal), @"1.5 kB"); - insta::assert_snapshot!(display(2048, Binary), @"2.0 KiB"); - insta::assert_snapshot!(display(2048, Decimal), @"2.0 kB"); - insta::assert_snapshot!(display(1_000_000, Binary), @"976.6 KiB"); - insta::assert_snapshot!(display(1_000_000, Decimal), @"1.0 MB"); - insta::assert_snapshot!(display(1_048_576, Binary), @"1.0 MiB"); - insta::assert_snapshot!(display(1_048_576, Decimal), @"1.0 MB"); - insta::assert_snapshot!(display(987_654_321, Binary), @"941.9 MiB"); - insta::assert_snapshot!(display(987_654_321, Decimal), @"987.7 MB"); - insta::assert_snapshot!(display(1_099_511_627_776, Binary), @"1.0 TiB"); - insta::assert_snapshot!(display(1_099_511_627_776, Decimal), @"1.1 TB"); - insta::assert_snapshot!(display(1_125_899_906_842_624, Binary), @"1.0 PiB"); - insta::assert_snapshot!(display(1_125_899_906_842_624, Decimal), @"1.1 PB"); - insta::assert_snapshot!(display(1_152_921_504_606_846_976, Binary), @"1.0 EiB"); - insta::assert_snapshot!(display(1_152_921_504_606_846_976, Decimal), @"1.2 EB"); - insta::assert_snapshot!(display(u64::MAX - 1, Binary), @"16.0 EiB"); - insta::assert_snapshot!(display(u64::MAX - 1, Decimal), @"18.4 EB"); - insta::assert_snapshot!(display(u64::MAX, Binary), @"16.0 EiB"); - insta::assert_snapshot!(display(u64::MAX, Decimal), @"18.4 EB"); + assert_snapshot!(display(0, Binary), @"0 B"); + assert_snapshot!(display(0, Decimal), @"0 B"); + assert_snapshot!(display(1, Binary), @"1 B"); + assert_snapshot!(display(1, Decimal), @"1 B"); + assert_snapshot!(display(500, Binary), @"500 B"); + assert_snapshot!(display(500, Decimal), @"500 B"); + assert_snapshot!(display(999, Binary), @"999 B"); + assert_snapshot!(display(999, Decimal), @"999 B"); + assert_snapshot!(display(1000, Binary), @"1000 B"); + assert_snapshot!(display(1000, Decimal), @"1.0 kB"); + assert_snapshot!(display(1023, Binary), @"1023 B"); + assert_snapshot!(display(1023, Decimal), @"1.0 kB"); + assert_snapshot!(display(1024, Binary), @"1.0 KiB"); + assert_snapshot!(display(1024, Decimal), @"1.0 kB"); + assert_snapshot!(display(1025, Binary), @"1.0 KiB"); + assert_snapshot!(display(1025, Decimal), @"1.0 kB"); + assert_snapshot!(display(1500, Binary), @"1.5 KiB"); + assert_snapshot!(display(1500, Decimal), @"1.5 kB"); + assert_snapshot!(display(2048, Binary), @"2.0 KiB"); + assert_snapshot!(display(2048, Decimal), @"2.0 kB"); + assert_snapshot!(display(1_000_000, Binary), @"976.6 KiB"); + assert_snapshot!(display(1_000_000, Decimal), @"1.0 MB"); + assert_snapshot!(display(1_048_576, Binary), @"1.0 MiB"); + assert_snapshot!(display(1_048_576, Decimal), @"1.0 MB"); + assert_snapshot!(display(987_654_321, Binary), @"941.9 MiB"); + assert_snapshot!(display(987_654_321, Decimal), @"987.7 MB"); + assert_snapshot!(display(1_099_511_627_776, Binary), @"1.0 TiB"); + assert_snapshot!(display(1_099_511_627_776, Decimal), @"1.1 TB"); + assert_snapshot!(display(1_125_899_906_842_624, Binary), @"1.0 PiB"); + assert_snapshot!(display(1_125_899_906_842_624, Decimal), @"1.1 PB"); + assert_snapshot!(display(1_152_921_504_606_846_976, Binary), @"1.0 EiB"); + assert_snapshot!(display(1_152_921_504_606_846_976, Decimal), @"1.2 EB"); + assert_snapshot!(display(u64::MAX - 1, Binary), @"16.0 EiB"); + assert_snapshot!(display(u64::MAX - 1, Decimal), @"18.4 EB"); + assert_snapshot!(display(u64::MAX, Binary), @"16.0 EiB"); + assert_snapshot!(display(u64::MAX, Decimal), @"18.4 EB"); } }