@@ -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 ] ) ]
1212fn 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 ] ) ]
2528fn 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 ] ) ]
3844fn 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 ] ) ]
5160fn 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 ) ] ) ]
8698fn 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 ) ] ) ]
100114fn 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
112129fn main ( ) {
0 commit comments