Skip to content

Commit 2b20379

Browse files
committed
bench: fix variance in remaining numfmt benchmarks
1 parent 2cb20e0 commit 2b20379

File tree

1 file changed

+68
-51
lines changed

1 file changed

+68
-51
lines changed

src/uu/numfmt/benches/numfmt_bench.rs

Lines changed: 68 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,66 @@ use uucore::benchmark::run_util_function;
1010
/// Benchmark SI formatting by passing numbers as command-line arguments
1111
#[divan::bench(args = [10_000])]
1212
fn numfmt_to_si(bencher: Bencher, count: usize) {
13-
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
14-
let mut args = vec!["--to=si"];
15-
let number_refs: Vec<&str> = numbers.iter().map(|s| s.as_str()).collect();
16-
args.extend(number_refs);
17-
18-
bencher.bench(|| {
19-
black_box(run_util_function(uumain, &args));
20-
});
13+
bencher
14+
.with_inputs(|| {
15+
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
16+
let mut args: Vec<String> = vec!["--to=si".to_string()];
17+
args.extend(numbers);
18+
args
19+
})
20+
.bench_values(|args| {
21+
let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
22+
black_box(run_util_function(uumain, &arg_refs));
23+
});
2124
}
2225

2326
/// Benchmark SI formatting with precision format
2427
#[divan::bench(args = [10_000])]
2528
fn numfmt_to_si_precision(bencher: Bencher, count: usize) {
26-
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
27-
let mut args = vec!["--to=si", "--format=%.6f"];
28-
let number_refs: Vec<&str> = numbers.iter().map(|s| s.as_str()).collect();
29-
args.extend(number_refs);
30-
31-
bencher.bench(|| {
32-
black_box(run_util_function(uumain, &args));
33-
});
29+
bencher
30+
.with_inputs(|| {
31+
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
32+
let mut args: Vec<String> = vec!["--to=si".to_string(), "--format=%.6f".to_string()];
33+
args.extend(numbers);
34+
args
35+
})
36+
.bench_values(|args| {
37+
let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
38+
black_box(run_util_function(uumain, &arg_refs));
39+
});
3440
}
3541

3642
/// Benchmark IEC (binary) formatting
3743
#[divan::bench(args = [10_000])]
3844
fn numfmt_to_iec(bencher: Bencher, count: usize) {
39-
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
40-
let mut args = vec!["--to=iec"];
41-
let number_refs: Vec<&str> = numbers.iter().map(|s| s.as_str()).collect();
42-
args.extend(number_refs);
43-
44-
bencher.bench(|| {
45-
black_box(run_util_function(uumain, &args));
46-
});
45+
bencher
46+
.with_inputs(|| {
47+
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
48+
let mut args: Vec<String> = vec!["--to=iec".to_string()];
49+
args.extend(numbers);
50+
args
51+
})
52+
.bench_values(|args| {
53+
let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
54+
black_box(run_util_function(uumain, &arg_refs));
55+
});
4756
}
4857

4958
/// Benchmark parsing from SI format back to raw numbers
5059
#[divan::bench(args = [10_000])]
5160
fn numfmt_from_si(bencher: Bencher, count: usize) {
52-
// Generate SI formatted data (e.g., "1K", "2K", etc.)
53-
let numbers: Vec<String> = (1..=count).map(|n| format!("{n}K")).collect();
54-
let mut args = vec!["--from=si"];
55-
let number_refs: Vec<&str> = numbers.iter().map(|s| s.as_str()).collect();
56-
args.extend(number_refs);
57-
58-
bencher.bench(|| {
59-
black_box(run_util_function(uumain, &args));
60-
});
61+
bencher
62+
.with_inputs(|| {
63+
// Generate SI formatted data (e.g., "1K", "2K", etc.)
64+
let numbers: Vec<String> = (1..=count).map(|n| format!("{n}K")).collect();
65+
let mut args: Vec<String> = vec!["--from=si".to_string()];
66+
args.extend(numbers);
67+
args
68+
})
69+
.bench_values(|args| {
70+
let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
71+
black_box(run_util_function(uumain, &arg_refs));
72+
});
6173
}
6274

6375
/// Benchmark large numbers with SI formatting
@@ -84,29 +96,34 @@ fn numfmt_large_numbers_si(bencher: Bencher, count: usize) {
8496
/// Benchmark different padding widths
8597
#[divan::bench(args = [(10_000, 50)])]
8698
fn numfmt_padding(bencher: Bencher, (count, padding): (usize, usize)) {
87-
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
88-
let padding_arg = format!("--padding={padding}");
89-
let mut args = vec!["--to=si", &padding_arg];
90-
let number_refs: Vec<&str> = numbers.iter().map(|s| s.as_str()).collect();
91-
args.extend(number_refs);
92-
93-
bencher.bench(|| {
94-
black_box(run_util_function(uumain, &args));
95-
});
99+
bencher
100+
.with_inputs(|| {
101+
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
102+
let mut args: Vec<String> = vec!["--to=si".to_string(), format!("--padding={padding}")];
103+
args.extend(numbers);
104+
args
105+
})
106+
.bench_values(|args| {
107+
let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
108+
black_box(run_util_function(uumain, &arg_refs));
109+
});
96110
}
97111

98112
/// Benchmark round modes with SI formatting
99113
#[divan::bench(args = [("up", 10_000), ("down", 10_000), ("towards-zero", 10_000)])]
100114
fn numfmt_round_modes(bencher: Bencher, (round_mode, count): (&str, usize)) {
101-
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
102-
let round_arg = format!("--round={round_mode}");
103-
let mut args = vec!["--to=si", &round_arg];
104-
let number_refs: Vec<&str> = numbers.iter().map(|s| s.as_str()).collect();
105-
args.extend(number_refs);
106-
107-
bencher.bench(|| {
108-
black_box(run_util_function(uumain, &args));
109-
});
115+
bencher
116+
.with_inputs(|| {
117+
let numbers: Vec<String> = (1..=count).map(|n| n.to_string()).collect();
118+
let mut args: Vec<String> =
119+
vec!["--to=si".to_string(), format!("--round={round_mode}")];
120+
args.extend(numbers);
121+
args
122+
})
123+
.bench_values(|args| {
124+
let arg_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
125+
black_box(run_util_function(uumain, &arg_refs));
126+
});
110127
}
111128

112129
fn main() {

0 commit comments

Comments
 (0)