@@ -23,9 +23,7 @@ fn bench_skip_ascii_whitespace(b: &mut test::Bencher) {
23
23
// skip_ascii_whitespace(&mut input.chars(), 0, &mut |range, res| {
24
24
// output.push((range, res))
25
25
// });
26
- unescape_unicode ( & input, Mode :: Str , & mut |range, res| {
27
- output. push ( ( range, res) )
28
- } ) ;
26
+ unescape_str ( & input, |range, res| output. push ( ( range, res) ) ) ;
29
27
assert_eq ! (
30
28
output,
31
29
[ ( ( 0 ..LEN + 2 ) , Err ( EscapeError :: MultipleSkippedLinesWarning ) ) ]
@@ -37,117 +35,122 @@ fn bench_skip_ascii_whitespace(b: &mut test::Bencher) {
37
35
// Check raw
38
36
//
39
37
40
- fn bench_check_raw ( b : & mut test:: Bencher , c : char , mode : Mode ) {
41
- let input: String = test:: black_box ( repeat_n ( c, LEN ) . collect ( ) ) ;
42
- assert_eq ! ( input. len( ) , LEN * c. len_utf8( ) ) ;
43
- b. iter ( || {
44
- let mut output = vec ! [ ] ;
45
- unescape_unicode ( & input, mode, & mut |range, res| output. push ( ( range, res) ) ) ;
46
- assert_eq ! ( output. len( ) , LEN ) ;
47
- assert_eq ! ( output[ 0 ] , ( ( 0 ..c. len_utf8( ) ) , Ok ( c) ) ) ;
48
- } ) ;
38
+ macro_rules! fn_bench_check_raw {
39
+ ( $name: ident, $unit: ty, $check_raw: ident) => {
40
+ fn $name( b: & mut test:: Bencher , s: & str , expected: $unit) {
41
+ let input: String = test:: black_box( repeat_n( s, LEN ) . collect( ) ) ;
42
+ assert_eq!( input. len( ) , LEN * s. len( ) ) ;
43
+ b. iter( || {
44
+ let mut output = vec![ ] ;
45
+
46
+ $check_raw( & input, |range, res| output. push( ( range, res) ) ) ;
47
+ assert_eq!( output. len( ) , LEN ) ;
48
+ assert_eq!( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
49
+ } ) ;
50
+ }
51
+ } ;
49
52
}
50
53
54
+ fn_bench_check_raw ! ( bench_check_raw_str, char , check_raw_str) ;
55
+ fn_bench_check_raw ! ( bench_check_raw_byte_str, u8 , check_raw_byte_str) ;
56
+ fn_bench_check_raw ! ( bench_check_raw_c_str, char , check_raw_c_str) ;
57
+
51
58
// raw str
52
59
53
60
#[ bench]
54
61
fn bench_check_raw_str_ascii ( b : & mut test:: Bencher ) {
55
- bench_check_raw ( b, 'a' , Mode :: RawStr ) ;
62
+ bench_check_raw_str ( b, "a" , 'a' ) ;
56
63
}
57
64
58
65
#[ bench]
59
66
fn bench_check_raw_str_unicode ( b : & mut test:: Bencher ) {
60
- bench_check_raw ( b, '🦀' , Mode :: RawStr ) ;
67
+ bench_check_raw_str ( b, "🦀" , '🦀' ) ;
61
68
}
62
69
63
70
// raw byte str
64
71
65
72
#[ bench]
66
- fn bench_check_raw_byte_str ( b : & mut test:: Bencher ) {
67
- bench_check_raw ( b, 'a' , Mode :: RawByteStr ) ;
73
+ fn bench_check_raw_byte_str_ascii ( b : & mut test:: Bencher ) {
74
+ bench_check_raw_byte_str ( b, "a" , b'a' ) ;
68
75
}
69
76
70
77
// raw C str
71
78
72
79
#[ bench]
73
80
fn bench_check_raw_c_str_ascii ( b : & mut test:: Bencher ) {
74
- bench_check_raw ( b, 'a' , Mode :: RawCStr ) ;
81
+ bench_check_raw_c_str ( b, "a" , 'a' ) ;
75
82
}
76
83
77
84
#[ bench]
78
85
fn bench_check_raw_c_str_unicode ( b : & mut test:: Bencher ) {
79
- bench_check_raw ( b, '🦀' , Mode :: RawCStr ) ;
86
+ bench_check_raw_c_str ( b, "🦀" , '🦀' ) ;
80
87
}
81
88
82
89
//
83
90
// Unescape
84
91
//
85
92
86
- fn bench_unescape ( b : & mut test:: Bencher , s : & str , mode : Mode , expected : char ) {
87
- let input: String = test:: black_box ( repeat_n ( s, LEN ) . collect ( ) ) ;
88
- assert_eq ! ( input. len( ) , LEN * s. len( ) ) ;
89
- b. iter ( || {
90
- let mut output = vec ! [ ] ;
91
- unescape_unicode ( & input, mode, & mut |range, res| output. push ( ( range, res) ) ) ;
92
- assert_eq ! ( output. len( ) , LEN ) ;
93
- assert_eq ! ( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
94
- } ) ;
93
+ macro_rules! fn_bench_unescape {
94
+ ( $name: ident, $unit: ty, $unescape: ident) => {
95
+ fn $name( b: & mut test:: Bencher , s: & str , expected: $unit) {
96
+ let input: String = test:: black_box( repeat_n( s, LEN ) . collect( ) ) ;
97
+ assert_eq!( input. len( ) , LEN * s. len( ) ) ;
98
+ b. iter( || {
99
+ let mut output = vec![ ] ;
100
+
101
+ $unescape( & input, |range, res| output. push( ( range, res) ) ) ;
102
+ assert_eq!( output. len( ) , LEN ) ;
103
+ assert_eq!( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
104
+ } ) ;
105
+ }
106
+ } ;
95
107
}
96
108
109
+ fn_bench_unescape ! ( bench_unescape_str, char , unescape_str) ;
110
+ fn_bench_unescape ! ( bench_unescape_byte_str, u8 , unescape_byte_str) ;
111
+ fn_bench_unescape ! ( bench_unescape_c_str, MixedUnit , unescape_c_str) ;
112
+
97
113
// str
98
114
99
115
#[ bench]
100
116
fn bench_unescape_str_trivial ( b : & mut test:: Bencher ) {
101
- bench_unescape ( b, r"a" , Mode :: Str , 'a' ) ;
117
+ bench_unescape_str ( b, r"a" , 'a' ) ;
102
118
}
103
119
104
120
#[ bench]
105
121
fn bench_unescape_str_ascii ( b : & mut test:: Bencher ) {
106
- bench_unescape ( b, r"\n" , Mode :: Str , '\n' ) ;
122
+ bench_unescape_str ( b, r"\n" , '\n' ) ;
107
123
}
108
124
109
125
#[ bench]
110
126
fn bench_unescape_str_hex ( b : & mut test:: Bencher ) {
111
- bench_unescape ( b, r"\x22" , Mode :: Str , '"' ) ;
127
+ bench_unescape_str ( b, r"\x22" , '"' ) ;
112
128
}
113
129
114
130
#[ bench]
115
131
fn bench_unescape_str_unicode ( b : & mut test:: Bencher ) {
116
- bench_unescape ( b, r"\u{1f980}" , Mode :: Str , '🦀' ) ;
132
+ bench_unescape_str ( b, r"\u{1f980}" , '🦀' ) ;
117
133
}
118
134
119
135
// byte str
120
136
121
137
#[ bench]
122
138
fn bench_unescape_byte_str_trivial ( b : & mut test:: Bencher ) {
123
- bench_unescape ( b, r"a" , Mode :: ByteStr , 'a' ) ;
139
+ bench_unescape_byte_str ( b, r"a" , b 'a') ;
124
140
}
125
141
126
142
#[ bench]
127
143
fn bench_unescape_byte_str_ascii ( b : & mut test:: Bencher ) {
128
- bench_unescape ( b, r"\n" , Mode :: ByteStr , b'\n' as char ) ;
144
+ bench_unescape_byte_str ( b, r"\n" , b'\n' ) ;
129
145
}
130
146
131
147
#[ bench]
132
148
fn bench_unescape_byte_str_hex ( b : & mut test:: Bencher ) {
133
- bench_unescape ( b, r"\xff" , Mode :: ByteStr , b'\xff' as char ) ;
149
+ bench_unescape_byte_str ( b, r"\xff" , b'\xff' ) ;
134
150
}
135
151
136
152
// C str
137
153
138
- fn bench_unescape_c_str ( b : & mut test:: Bencher , s : & str , expected : MixedUnit ) {
139
- let input: String = test:: black_box ( repeat_n ( s, LEN ) . collect ( ) ) ;
140
- assert_eq ! ( input. len( ) , LEN * s. len( ) ) ;
141
- b. iter ( || {
142
- let mut output = vec ! [ ] ;
143
- unescape_mixed ( & input, Mode :: CStr , & mut |range, res| {
144
- output. push ( ( range, res) )
145
- } ) ;
146
- assert_eq ! ( output. len( ) , LEN ) ;
147
- assert_eq ! ( output[ 0 ] , ( ( 0 ..s. len( ) ) , Ok ( expected) ) ) ;
148
- } ) ;
149
- }
150
-
151
154
#[ bench]
152
155
fn bench_unescape_c_str_trivial ( b : & mut test:: Bencher ) {
153
156
bench_unescape_c_str ( b, r"a" , MixedUnit :: Char ( 'a' ) ) ;
0 commit comments