@@ -37,128 +37,122 @@ fn bench_skip_ascii_whitespace(b: &mut test::Bencher) {
3737// Check raw
3838//
3939
40- #[ allow( clippy:: type_complexity) ]
41- fn bench_check_raw < UNIT : Into < char > + PartialEq + Debug + Copy > (
42- b : & mut test:: Bencher ,
43- c : UNIT ,
44- check_raw : fn ( & str , & mut dyn FnMut ( Range < usize > , Result < UNIT , EscapeError > ) ) ,
45- ) {
46- let input: String = test:: black_box ( repeat_n ( c. into ( ) , LEN ) . collect ( ) ) ;
47- assert_eq ! ( input. len( ) , LEN * c. into( ) . len_utf8( ) ) ;
48-
49- b. iter ( || {
50- let mut output = vec ! [ ] ;
51-
52- check_raw ( & input, & mut |range, res| output. push ( ( range, res) ) ) ;
53- assert_eq ! ( output. len( ) , LEN ) ;
54- assert_eq ! ( output[ 0 ] , ( 0 ..c. into( ) . len_utf8( ) , Ok ( c) ) ) ;
55- } ) ;
56- }
40+ macro_rules! fn_bench_check_raw {
41+ ( $name: ident, $unit: ty, $check_raw: ident) => {
42+ fn $name( b: & mut test:: Bencher , s: & str , expected: $unit) {
43+ let input: String = test:: black_box( repeat_n( s, LEN ) . collect( ) ) ;
44+ assert_eq!( input. len( ) , LEN * s. len( ) ) ;
45+ b. iter( || {
46+ let mut output = vec![ ] ;
47+
48+ $check_raw( & input, |range, res| output. push( ( range, res) ) ) ;
49+ assert_eq!( output. len( ) , LEN ) ;
50+ assert_eq!( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
51+ } ) ;
52+ }
53+ } ;
54+ }
55+
56+ fn_bench_check_raw ! ( bench_check_raw_str, char , check_raw_str) ;
57+ fn_bench_check_raw ! ( bench_check_raw_byte_str, u8 , check_raw_byte_str) ;
58+ fn_bench_check_raw ! ( bench_check_raw_c_str, char , check_raw_c_str) ;
5759
5860// raw str
5961
6062#[ bench]
6163fn bench_check_raw_str_ascii ( b : & mut test:: Bencher ) {
62- bench_check_raw ( b, 'a' , |s , cb| check_raw_str ( s , cb ) ) ;
64+ bench_check_raw_str ( b, "a" , 'a' ) ;
6365}
6466
6567#[ bench]
6668fn bench_check_raw_str_unicode ( b : & mut test:: Bencher ) {
67- bench_check_raw ( b, '🦀' , |s , cb| check_raw_str ( s , cb ) ) ;
69+ bench_check_raw_str ( b, "🦀" , '🦀' ) ;
6870}
6971
7072// raw byte str
7173
7274#[ bench]
73- fn bench_check_raw_byte_str ( b : & mut test:: Bencher ) {
74- bench_check_raw ( b, b'a' , |s , cb| check_raw_byte_str ( s , cb ) ) ;
75+ fn bench_check_raw_byte_str_ascii ( b : & mut test:: Bencher ) {
76+ bench_check_raw_byte_str ( b, "a" , b'a' ) ;
7577}
7678
7779// raw C str
7880
7981#[ bench]
8082fn bench_check_raw_c_str_ascii ( b : & mut test:: Bencher ) {
81- bench_check_raw ( b, 'a' , |s , cb| check_raw_c_str ( s , cb ) ) ;
83+ bench_check_raw_c_str ( b, "a" , 'a' ) ;
8284}
8385
8486#[ bench]
8587fn bench_check_raw_c_str_unicode ( b : & mut test:: Bencher ) {
86- bench_check_raw ( b, '🦀' , |s , cb| check_raw_c_str ( s , cb ) ) ;
88+ bench_check_raw_c_str ( b, "🦀" , '🦀' ) ;
8789}
8890
8991//
9092// Unescape
9193//
9294
93- #[ allow( clippy:: type_complexity) ]
94- fn bench_unescape < UNIT : Into < char > + PartialEq + Debug + Copy > (
95- b : & mut test:: Bencher ,
96- s : & str ,
97- expected : UNIT ,
98- unescape : fn ( & str , & mut dyn FnMut ( Range < usize > , Result < UNIT , EscapeError > ) ) ,
99- ) {
100- let input: String = test:: black_box ( repeat_n ( s, LEN ) . collect ( ) ) ;
101- assert_eq ! ( input. len( ) , LEN * s. len( ) ) ;
102- b. iter ( || {
103- let mut output = vec ! [ ] ;
104- unescape ( & input, & mut |range, res| output. push ( ( range, res) ) ) ;
105- assert_eq ! ( output. len( ) , LEN ) ;
106- assert_eq ! ( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
107- } ) ;
95+ macro_rules! fn_bench_unescape {
96+ ( $name: ident, $unit: ty, $unescape: ident) => {
97+ fn $name( b: & mut test:: Bencher , s: & str , expected: $unit) {
98+ let input: String = test:: black_box( repeat_n( s, LEN ) . collect( ) ) ;
99+ assert_eq!( input. len( ) , LEN * s. len( ) ) ;
100+ b. iter( || {
101+ let mut output = vec![ ] ;
102+
103+ $unescape( & input, |range, res| output. push( ( range, res) ) ) ;
104+ assert_eq!( output. len( ) , LEN ) ;
105+ assert_eq!( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
106+ } ) ;
107+ }
108+ } ;
108109}
109110
111+ fn_bench_unescape ! ( bench_unescape_str, char , unescape_str) ;
112+ fn_bench_unescape ! ( bench_unescape_byte_str, u8 , unescape_byte_str) ;
113+ fn_bench_unescape ! ( bench_unescape_c_str, MixedUnit , unescape_c_str) ;
114+
110115// str
111116
112117#[ bench]
113118fn bench_unescape_str_trivial ( b : & mut test:: Bencher ) {
114- bench_unescape ( b, r"a" , 'a' , |s , cb| unescape_str ( s , cb ) ) ;
119+ bench_unescape_str ( b, r"a" , 'a' ) ;
115120}
116121
117122#[ bench]
118123fn bench_unescape_str_ascii ( b : & mut test:: Bencher ) {
119- bench_unescape ( b, r"\n" , '\n' , |s , cb| unescape_str ( s , cb ) ) ;
124+ bench_unescape_str ( b, r"\n" , '\n' ) ;
120125}
121126
122127#[ bench]
123128fn bench_unescape_str_hex ( b : & mut test:: Bencher ) {
124- bench_unescape ( b, r"\x22" , '"' , |s , cb| unescape_str ( s , cb ) ) ;
129+ bench_unescape_str ( b, r"\x22" , '"' ) ;
125130}
126131
127132#[ bench]
128133fn bench_unescape_str_unicode ( b : & mut test:: Bencher ) {
129- bench_unescape ( b, r"\u{1f980}" , '🦀' , |s , cb| unescape_str ( s , cb ) ) ;
134+ bench_unescape_str ( b, r"\u{1f980}" , '🦀' ) ;
130135}
131136
132137// byte str
133138
134139#[ bench]
135140fn bench_unescape_byte_str_trivial ( b : & mut test:: Bencher ) {
136- bench_unescape ( b, r"a" , b'a' , |s , cb| unescape_byte_str ( s , cb ) ) ;
141+ bench_unescape_byte_str ( b, r"a" , b'a' ) ;
137142}
138143
139144#[ bench]
140145fn bench_unescape_byte_str_ascii ( b : & mut test:: Bencher ) {
141- bench_unescape ( b, r"\n" , b'\n' , |s , cb| unescape_byte_str ( s , cb ) ) ;
146+ bench_unescape_byte_str ( b, r"\n" , b'\n' ) ;
142147}
143148
144149#[ bench]
145150fn bench_unescape_byte_str_hex ( b : & mut test:: Bencher ) {
146- bench_unescape ( b, r"\xff" , b'\xff' , |s , cb| unescape_byte_str ( s , cb ) ) ;
151+ bench_unescape_byte_str ( b, r"\xff" , b'\xff' ) ;
147152}
148153
149154// C str
150155
151- fn bench_unescape_c_str ( b : & mut test:: Bencher , s : & str , expected : MixedUnit ) {
152- let input: String = test:: black_box ( repeat_n ( s, LEN ) . collect ( ) ) ;
153- assert_eq ! ( input. len( ) , LEN * s. len( ) ) ;
154- b. iter ( || {
155- let mut output = vec ! [ ] ;
156- unescape_c_str ( & input, & mut |range, res| output. push ( ( range, res) ) ) ;
157- assert_eq ! ( output. len( ) , LEN ) ;
158- assert_eq ! ( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
159- } ) ;
160- }
161-
162156#[ bench]
163157fn bench_unescape_c_str_trivial ( b : & mut test:: Bencher ) {
164158 bench_unescape_c_str ( b, r"a" , MixedUnit :: Char ( 'a' ) ) ;
0 commit comments