@@ -23,9 +23,7 @@ fn bench_skip_ascii_whitespace(b: &mut test::Bencher) {
2323 // skip_ascii_whitespace(&mut input.chars(), 0, &mut |range, res| {
2424 // output.push((range, res))
2525 // });
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) ) ) ;
2927 assert_eq ! (
3028 output,
3129 [ ( ( 0 ..LEN + 2 ) , Err ( EscapeError :: MultipleSkippedLinesWarning ) ) ]
@@ -37,117 +35,122 @@ fn bench_skip_ascii_whitespace(b: &mut test::Bencher) {
3735// Check raw
3836//
3937
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+ } ;
4952}
5053
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+
5158// raw str
5259
5360#[ bench]
5461fn 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' ) ;
5663}
5764
5865#[ bench]
5966fn bench_check_raw_str_unicode ( b : & mut test:: Bencher ) {
60- bench_check_raw ( b, '🦀' , Mode :: RawStr ) ;
67+ bench_check_raw_str ( b, "🦀" , '🦀' ) ;
6168}
6269
6370// raw byte str
6471
6572#[ 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' ) ;
6875}
6976
7077// raw C str
7178
7279#[ bench]
7380fn 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' ) ;
7582}
7683
7784#[ bench]
7885fn bench_check_raw_c_str_unicode ( b : & mut test:: Bencher ) {
79- bench_check_raw ( b, '🦀' , Mode :: RawCStr ) ;
86+ bench_check_raw_c_str ( b, "🦀" , '🦀' ) ;
8087}
8188
8289//
8390// Unescape
8491//
8592
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+ } ;
95107}
96108
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+
97113// str
98114
99115#[ bench]
100116fn 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' ) ;
102118}
103119
104120#[ bench]
105121fn 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' ) ;
107123}
108124
109125#[ bench]
110126fn bench_unescape_str_hex ( b : & mut test:: Bencher ) {
111- bench_unescape ( b, r"\x22" , Mode :: Str , '"' ) ;
127+ bench_unescape_str ( b, r"\x22" , '"' ) ;
112128}
113129
114130#[ bench]
115131fn 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}" , '🦀' ) ;
117133}
118134
119135// byte str
120136
121137#[ bench]
122138fn 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') ;
124140}
125141
126142#[ bench]
127143fn 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' ) ;
129145}
130146
131147#[ bench]
132148fn 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' ) ;
134150}
135151
136152// C str
137153
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-
151154#[ bench]
152155fn bench_unescape_c_str_trivial ( b : & mut test:: Bencher ) {
153156 bench_unescape_c_str ( b, r"a" , MixedUnit :: Char ( 'a' ) ) ;
0 commit comments