diff --git a/.vscode/cspell.dictionaries/acronyms+names.wordlist.txt b/.vscode/cspell.dictionaries/acronyms+names.wordlist.txt index 8993f5d6a31..2724d2b1fa2 100644 --- a/.vscode/cspell.dictionaries/acronyms+names.wordlist.txt +++ b/.vscode/cspell.dictionaries/acronyms+names.wordlist.txt @@ -70,3 +70,6 @@ Solaris SysV Xenix Yargs + +# Product +codspeed diff --git a/Cargo.lock b/Cargo.lock index 2c4eeca45ca..c2eb5af450e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,6 +97,21 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arbitrary" version = "1.4.1" @@ -162,6 +177,15 @@ dependencies = [ "compare", ] +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bincode" version = "2.0.1" @@ -420,12 +444,80 @@ dependencies = [ "roff", ] +[[package]] +name = "codspeed" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35584c5fcba8059780748866387fb97c5a203bcfc563fc3d0790af406727a117" +dependencies = [ + "anyhow", + "bincode 1.3.3", + "colored", + "glob", + "libc", + "nix 0.29.0", + "serde", + "serde_json", + "statrs", + "uuid", +] + +[[package]] +name = "codspeed-divan-compat" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf64eda57508448d59efd940bad62ede7c50b0d451a150b8d6a0eca642792a6" +dependencies = [ + "codspeed", + "codspeed-divan-compat-macros", + "codspeed-divan-compat-walltime", +] + +[[package]] +name = "codspeed-divan-compat-macros" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058167258e819b16a4ba601fdfe270349ef191154758dbce122c62a698f70ba8" +dependencies = [ + "divan-macros", + "itertools 0.14.0", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "codspeed-divan-compat-walltime" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9866ee3a4ef9d2868823ea5811886763af244f2df584ca247f49281c43f1f" +dependencies = [ + "cfg-if", + "clap", + "codspeed", + "condtype", + "divan-macros", + "libc", + "regex-lite", +] + [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + [[package]] name = "compare" version = "0.1.0" @@ -496,7 +588,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" name = "coreutils" version = "0.2.2" dependencies = [ - "bincode", + "bincode 2.0.1", "chrono", "clap", "clap_complete", @@ -507,7 +599,7 @@ dependencies = [ "glob", "hex-literal", "libc", - "nix", + "nix 0.30.1", "num-prime", "phf", "phf_codegen", @@ -804,7 +896,7 @@ version = "3.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" dependencies = [ - "nix", + "nix 0.30.1", "windows-sys 0.59.0", ] @@ -902,25 +994,11 @@ dependencies = [ "syn", ] -[[package]] -name = "divan" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a405457ec78b8fe08b0e32b4a3570ab5dff6dd16eb9e76a5ee0a9d9cbd898933" -dependencies = [ - "cfg-if", - "clap", - "condtype", - "divan-macros", - "libc", - "regex-lite", -] - [[package]] name = "divan-macros" -version = "0.1.21" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9556bc800956545d6420a640173e5ba7dfa82f38d3ea5a167eb555bc69ac3323" +checksum = "8dc51d98e636f5e3b0759a39257458b22619cac7e96d932da6eeb052891bb67c" dependencies = [ "proc-macro2", "quote", @@ -1003,7 +1081,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1595,7 +1673,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1663,6 +1741,12 @@ dependencies = [ "libc", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.175" @@ -1819,6 +1903,18 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nix" version = "0.30.1" @@ -2463,7 +2559,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.0", ] [[package]] @@ -2709,6 +2805,16 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "statrs" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3fe7c28c6512e766b0874335db33c94ad7b8f9054228ae1c2abd47ce7d335e" +dependencies = [ + "approx", + "num-traits", +] + [[package]] name = "strsim" version = "0.11.1" @@ -2753,7 +2859,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.0", ] [[package]] @@ -3076,7 +3182,7 @@ dependencies = [ "clap", "fluent", "memchr", - "nix", + "nix 0.30.1", "tempfile", "thiserror 2.0.16", "uucore", @@ -3216,7 +3322,7 @@ dependencies = [ "fluent", "gcd", "libc", - "nix", + "nix 0.30.1", "signal-hook", "thiserror 2.0.16", "uucore", @@ -3288,7 +3394,7 @@ version = "0.2.2" dependencies = [ "clap", "fluent", - "nix", + "nix 0.30.1", "rust-ini", "thiserror 2.0.16", "uucore", @@ -3461,7 +3567,7 @@ version = "0.2.2" dependencies = [ "clap", "fluent", - "nix", + "nix 0.30.1", "uucore", ] @@ -3559,7 +3665,7 @@ dependencies = [ "clap", "crossterm", "fluent", - "nix", + "nix 0.30.1", "tempfile", "uucore", ] @@ -3585,7 +3691,7 @@ dependencies = [ "clap", "fluent", "libc", - "nix", + "nix 0.30.1", "uucore", ] @@ -3828,7 +3934,7 @@ dependencies = [ "fnv", "itertools 0.14.0", "memchr", - "nix", + "nix 0.30.1", "rand 0.9.2", "rayon", "self_cell", @@ -3885,7 +3991,7 @@ version = "0.2.2" dependencies = [ "clap", "fluent", - "nix", + "nix 0.30.1", "uucore", ] @@ -3904,7 +4010,7 @@ version = "0.2.2" dependencies = [ "clap", "fluent", - "nix", + "nix 0.30.1", "uucore", "windows-sys 0.61.0", ] @@ -3944,7 +4050,7 @@ version = "0.2.2" dependencies = [ "clap", "fluent", - "nix", + "nix 0.30.1", "uucore", ] @@ -3966,7 +4072,7 @@ dependencies = [ "clap", "fluent", "libc", - "nix", + "nix 0.30.1", "uucore", ] @@ -4029,7 +4135,7 @@ version = "0.2.2" dependencies = [ "clap", "fluent", - "nix", + "nix 0.30.1", "uucore", ] @@ -4109,10 +4215,10 @@ version = "0.2.2" dependencies = [ "bytecount", "clap", - "divan", + "codspeed-divan-compat", "fluent", "libc", - "nix", + "nix 0.30.1", "tempfile", "thiserror 2.0.16", "unicode-width 0.2.1", @@ -4145,7 +4251,7 @@ dependencies = [ "clap", "fluent", "itertools 0.14.0", - "nix", + "nix 0.30.1", "uucore", ] @@ -4181,7 +4287,7 @@ dependencies = [ "libc", "md-5", "memchr", - "nix", + "nix 0.30.1", "num-traits", "number_prefix", "os_display", @@ -4218,6 +4324,7 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ + "getrandom 0.3.3", "js-sys", "wasm-bindgen", ] @@ -4228,7 +4335,7 @@ version = "0.2.2" dependencies = [ "ctor", "libc", - "nix", + "nix 0.30.1", "pretty_assertions", "rand 0.9.2", "regex", @@ -4399,7 +4506,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 271c57630f2..59898b99666 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -316,7 +316,7 @@ compare = "0.1.0" crossterm = "0.29.0" ctor = "0.5.0" ctrlc = { version = "3.4.7", features = ["termination"] } -divan = "0.1" +divan = { package = "codspeed-divan-compat", version = "*" } dns-lookup = { version = "3.0.0" } exacl = "0.12.0" file_diff = "1.0.0" diff --git a/src/uu/wc/benches/wc_bench.rs b/src/uu/wc/benches/wc_bench.rs index e4eabf3c664..72aa85c1685 100644 --- a/src/uu/wc/benches/wc_bench.rs +++ b/src/uu/wc/benches/wc_bench.rs @@ -85,34 +85,8 @@ fn run_uutils_wc(args: &[&str]) -> i32 { i32::from(!output.success()) } -/// Benchmark different file sizes for line counting -#[divan::bench(args = [1, 5, 10, 25, 50])] -fn wc_lines_synthetic(bencher: Bencher, size_mb: usize) { - let temp_dir = tempfile::tempdir().unwrap(); - let data = generate_test_data(size_mb, 80); - let file_path = create_test_file(&data, &temp_dir); - let file_path_str = file_path.to_str().unwrap(); - - bencher.bench(|| { - black_box(run_uutils_wc(&["-l", file_path_str])); - }); -} - -/// Benchmark different file sizes for character counting -#[divan::bench(args = [1, 5, 10, 25])] -fn wc_chars_synthetic(bencher: Bencher, size_mb: usize) { - let temp_dir = tempfile::tempdir().unwrap(); - let data = generate_test_data(size_mb, 80); - let file_path = create_test_file(&data, &temp_dir); - let file_path_str = file_path.to_str().unwrap(); - - bencher.bench(|| { - black_box(run_uutils_wc(&["-m", file_path_str])); - }); -} - /// Benchmark different file sizes for byte counting -#[divan::bench(args = [1, 5, 10, 50, 100])] +#[divan::bench(args = [10, 50, 100])] fn wc_bytes_synthetic(bencher: Bencher, size_mb: usize) { let temp_dir = tempfile::tempdir().unwrap(); let data = generate_test_data(size_mb, 80); @@ -124,8 +98,7 @@ fn wc_bytes_synthetic(bencher: Bencher, size_mb: usize) { }); } -/// Benchmark word counting (should use traditional read path) -#[divan::bench(args = [1, 5, 10, 25])] +#[divan::bench(args = [10, 100, 1_000])] fn wc_words_synthetic(bencher: Bencher, size_mb: usize) { let temp_dir = tempfile::tempdir().unwrap(); let data = generate_test_data(size_mb, 80); @@ -138,7 +111,7 @@ fn wc_words_synthetic(bencher: Bencher, size_mb: usize) { } /// Benchmark combined byte+line counting -#[divan::bench(args = [1, 5, 10, 50])] +#[divan::bench(args = [10, 100, 1_000])] fn wc_bytes_lines_synthetic(bencher: Bencher, size_mb: usize) { let temp_dir = tempfile::tempdir().unwrap(); let data = generate_test_data(size_mb, 80); @@ -150,19 +123,6 @@ fn wc_bytes_lines_synthetic(bencher: Bencher, size_mb: usize) { }); } -/// Benchmark default wc behavior (bytes, lines, words) -#[divan::bench(args = [1, 5, 10])] -fn wc_default_synthetic(bencher: Bencher, size_mb: usize) { - let temp_dir = tempfile::tempdir().unwrap(); - let data = generate_test_data(size_mb, 80); - let file_path = create_test_file(&data, &temp_dir); - let file_path_str = file_path.to_str().unwrap(); - - bencher.bench(|| { - black_box(run_uutils_wc(&[file_path_str])); - }); -} - /// Test different line lengths impact on performance #[divan::bench(args = [(5, 50), (5, 100), (5, 200), (5, 500)])] fn wc_lines_variable_length(bencher: Bencher, (size_mb, avg_line_len): (usize, usize)) {