mirror of
https://github.com/uutils/coreutils.git
synced 2025-12-23 08:47:37 +00:00
fold: add a benchmark
This commit is contained in:
parent
b4f8eac90c
commit
7120f85d97
3 changed files with 62 additions and 0 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -3476,7 +3476,9 @@ name = "uu_fold"
|
|||
version = "0.2.2"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"codspeed-divan-compat",
|
||||
"fluent",
|
||||
"tempfile",
|
||||
"uucore",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,15 @@ clap = { workspace = true }
|
|||
uucore = { workspace = true }
|
||||
fluent = { workspace = true }
|
||||
|
||||
[dev-dependencies]
|
||||
divan = { workspace = true }
|
||||
tempfile = { workspace = true }
|
||||
uucore = { workspace = true, features = ["benchmark"] }
|
||||
|
||||
[[bin]]
|
||||
name = "fold"
|
||||
path = "src/main.rs"
|
||||
|
||||
[[bench]]
|
||||
name = "fold_bench"
|
||||
harness = false
|
||||
|
|
|
|||
51
src/uu/fold/benches/fold_bench.rs
Normal file
51
src/uu/fold/benches/fold_bench.rs
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
// This file is part of the uutils coreutils package.
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE
|
||||
// file that was distributed with this source code.
|
||||
|
||||
use divan::{Bencher, black_box};
|
||||
use std::fmt::Write;
|
||||
use uu_fold::uumain;
|
||||
use uucore::benchmark::{create_test_file, run_util_function};
|
||||
|
||||
/// Benchmark folding many short lines
|
||||
#[divan::bench(args = [100_000])]
|
||||
fn fold_many_lines(bencher: Bencher, num_lines: usize) {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
// Create long lines that need folding
|
||||
let data = (0..num_lines)
|
||||
.fold(String::new(), |mut acc, i| {
|
||||
writeln!(&mut acc, "This is a very long line number {i} that definitely needs to be folded at the default width of 80 columns").unwrap();
|
||||
acc
|
||||
});
|
||||
let file_path = create_test_file(data.as_bytes(), temp_dir.path());
|
||||
let file_path_str = file_path.to_str().unwrap();
|
||||
|
||||
bencher.bench(|| {
|
||||
black_box(run_util_function(uumain, &[file_path_str]));
|
||||
});
|
||||
}
|
||||
|
||||
/// Benchmark folding with custom width
|
||||
#[divan::bench(args = [50_000])]
|
||||
fn fold_custom_width(bencher: Bencher, num_lines: usize) {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let data = (0..num_lines).fold(String::new(), |mut acc, i| {
|
||||
writeln!(
|
||||
&mut acc,
|
||||
"Line {i} with enough text to exceed width 40 characters and require folding"
|
||||
)
|
||||
.unwrap();
|
||||
acc
|
||||
});
|
||||
let file_path = create_test_file(data.as_bytes(), temp_dir.path());
|
||||
let file_path_str = file_path.to_str().unwrap();
|
||||
|
||||
bencher.bench(|| {
|
||||
black_box(run_util_function(uumain, &["-w", "40", file_path_str]));
|
||||
});
|
||||
}
|
||||
|
||||
fn main() {
|
||||
divan::main();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue