@@ -37,128 +37,122 @@ fn bench_skip_ascii_whitespace(b: &mut test::Bencher) {
37
37
// Check raw
38
38
//
39
39
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) ;
57
59
58
60
// raw str
59
61
60
62
#[ bench]
61
63
fn 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' ) ;
63
65
}
64
66
65
67
#[ bench]
66
68
fn 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, "🦀" , '🦀' ) ;
68
70
}
69
71
70
72
// raw byte str
71
73
72
74
#[ 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' ) ;
75
77
}
76
78
77
79
// raw C str
78
80
79
81
#[ bench]
80
82
fn 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' ) ;
82
84
}
83
85
84
86
#[ bench]
85
87
fn 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, "🦀" , '🦀' ) ;
87
89
}
88
90
89
91
//
90
92
// Unescape
91
93
//
92
94
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
+ } ;
108
109
}
109
110
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
+
110
115
// str
111
116
112
117
#[ bench]
113
118
fn 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' ) ;
115
120
}
116
121
117
122
#[ bench]
118
123
fn 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' ) ;
120
125
}
121
126
122
127
#[ bench]
123
128
fn 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" , '"' ) ;
125
130
}
126
131
127
132
#[ bench]
128
133
fn 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}" , '🦀' ) ;
130
135
}
131
136
132
137
// byte str
133
138
134
139
#[ bench]
135
140
fn 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' ) ;
137
142
}
138
143
139
144
#[ bench]
140
145
fn 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' ) ;
142
147
}
143
148
144
149
#[ bench]
145
150
fn 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' ) ;
147
152
}
148
153
149
154
// C str
150
155
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
-
162
156
#[ bench]
163
157
fn bench_unescape_c_str_trivial ( b : & mut test:: Bencher ) {
164
158
bench_unescape_c_str ( b, r"a" , MixedUnit :: Char ( 'a' ) ) ;
0 commit comments