@@ -8,7 +8,7 @@ use quick_xml::Reader;
8
8
use test:: Bencher ;
9
9
10
10
#[ bench]
11
- fn bench_quick_xml ( b : & mut Bencher ) {
11
+ fn bench_quick_xml_normal ( b : & mut Bencher ) {
12
12
let src: & [ u8 ] = include_bytes ! ( "../tests/sample_rss.xml" ) ;
13
13
b. iter ( || {
14
14
let mut r = Reader :: from_reader ( src) ;
@@ -67,6 +67,170 @@ fn bench_quick_xml_escaped(b: &mut Bencher) {
67
67
buf. clear ( ) ;
68
68
}
69
69
assert_eq ! ( count, 1550 ) ;
70
+
71
+ // Windows has \r\n instead of \n
72
+ #[ cfg( windows) ]
73
+ assert_eq ! ( nbtxt, 67661 ) ;
74
+
75
+ #[ cfg( not( windows) ) ]
70
76
assert_eq ! ( nbtxt, 66277 ) ;
71
77
} ) ;
72
78
}
79
+
80
+ #[ bench]
81
+ fn bench_quick_xml_normal_trimmed ( b : & mut Bencher ) {
82
+ let src: & [ u8 ] = include_bytes ! ( "../tests/sample_rss.xml" ) ;
83
+ b. iter ( || {
84
+ let mut r = Reader :: from_reader ( src) ;
85
+ r. check_end_names ( false )
86
+ . check_comments ( false )
87
+ . trim_text ( true ) ;
88
+ let mut count = test:: black_box ( 0 ) ;
89
+ let mut buf = Vec :: new ( ) ;
90
+ loop {
91
+ match r. read_event ( & mut buf) {
92
+ Ok ( Event :: Start ( _) ) | Ok ( Event :: Empty ( _) ) => count += 1 ,
93
+ Ok ( Event :: Eof ) => break ,
94
+ _ => ( ) ,
95
+ }
96
+ buf. clear ( ) ;
97
+ }
98
+ assert_eq ! ( count, 1550 ) ;
99
+ } ) ;
100
+ }
101
+
102
+ #[ bench]
103
+ fn bench_quick_xml_namespaced_trimmed ( b : & mut Bencher ) {
104
+ let src: & [ u8 ] = include_bytes ! ( "../tests/sample_rss.xml" ) ;
105
+ b. iter ( || {
106
+ let mut r = Reader :: from_reader ( src) ;
107
+ r. check_end_names ( false )
108
+ . check_comments ( false )
109
+ . trim_text ( true ) ;
110
+ let mut count = test:: black_box ( 0 ) ;
111
+ let mut buf = Vec :: new ( ) ;
112
+ let mut ns_buf = Vec :: new ( ) ;
113
+ loop {
114
+ match r. read_namespaced_event ( & mut buf, & mut ns_buf) {
115
+ Ok ( ( _, Event :: Start ( _) ) ) | Ok ( ( _, Event :: Empty ( _) ) ) => count += 1 ,
116
+ Ok ( ( _, Event :: Eof ) ) => break ,
117
+ _ => ( ) ,
118
+ }
119
+ buf. clear ( ) ;
120
+ }
121
+ assert_eq ! ( count, 1550 ) ;
122
+ } ) ;
123
+ }
124
+
125
+ #[ bench]
126
+ fn bench_quick_xml_escaped_trimmed ( b : & mut Bencher ) {
127
+ let src: & [ u8 ] = include_bytes ! ( "../tests/sample_rss.xml" ) ;
128
+ b. iter ( || {
129
+ let mut buf = Vec :: new ( ) ;
130
+ let mut r = Reader :: from_reader ( src) ;
131
+ r. check_end_names ( false )
132
+ . check_comments ( false )
133
+ . trim_text ( true ) ;
134
+ let mut count = test:: black_box ( 0 ) ;
135
+ let mut nbtxt = test:: black_box ( 0 ) ;
136
+ loop {
137
+ match r. read_event ( & mut buf) {
138
+ Ok ( Event :: Start ( _) ) | Ok ( Event :: Empty ( _) ) => count += 1 ,
139
+ Ok ( Event :: Text ( ref e) ) => nbtxt += e. unescaped ( ) . unwrap ( ) . len ( ) ,
140
+ Ok ( Event :: Eof ) => break ,
141
+ _ => ( ) ,
142
+ }
143
+ buf. clear ( ) ;
144
+ }
145
+ assert_eq ! ( count, 1550 ) ;
146
+
147
+ // Windows has \r\n instead of \n
148
+ #[ cfg( windows) ]
149
+ assert_eq ! ( nbtxt, 50334 ) ;
150
+
151
+ #[ cfg( not( windows) ) ]
152
+ assert_eq ! ( nbtxt, 50261 ) ;
153
+ } ) ;
154
+ }
155
+
156
+ #[ bench]
157
+ fn bench_quick_xml_one_text_event ( b : & mut Bencher ) {
158
+ let src = "Hello world!" . repeat ( 512 / 12 ) . into_bytes ( ) ;
159
+ let mut buf = Vec :: with_capacity ( 1024 ) ;
160
+ b. iter ( || {
161
+ let mut r = Reader :: from_reader ( src. as_ref ( ) ) ;
162
+ let mut nbtxt = test:: black_box ( 0 ) ;
163
+ r. check_end_names ( false ) . check_comments ( false ) ;
164
+ match r. read_event ( & mut buf) {
165
+ Ok ( Event :: Text ( ref e) ) => nbtxt += e. unescaped ( ) . unwrap ( ) . len ( ) ,
166
+ something_else => panic ! ( "Did not expect {:?}" , something_else) ,
167
+ } ;
168
+
169
+ buf. clear ( ) ;
170
+
171
+ assert_eq ! ( nbtxt, 504 ) ;
172
+ } )
173
+ }
174
+
175
+ #[ bench]
176
+ fn bench_quick_xml_one_start_event_trimmed ( b : & mut Bencher ) {
177
+ let src = format ! ( r#"<hello target="{}">"# , "world" . repeat( 512 / 5 ) ) . into_bytes ( ) ;
178
+ let mut buf = Vec :: with_capacity ( 1024 ) ;
179
+ b. iter ( || {
180
+ let mut r = Reader :: from_reader ( src. as_ref ( ) ) ;
181
+ let mut nbtxt = test:: black_box ( 0 ) ;
182
+ r. check_end_names ( false )
183
+ . check_comments ( false )
184
+ . trim_text ( true ) ;
185
+ match r. read_event ( & mut buf) {
186
+ Ok ( Event :: Start ( ref e) ) => nbtxt += e. unescaped ( ) . unwrap ( ) . len ( ) ,
187
+ something_else => panic ! ( "Did not expect {:?}" , something_else) ,
188
+ } ;
189
+
190
+ buf. clear ( ) ;
191
+
192
+ assert_eq ! ( nbtxt, 525 ) ;
193
+ } )
194
+ }
195
+
196
+ #[ bench]
197
+ fn bench_quick_xml_one_comment_event_trimmed ( b : & mut Bencher ) {
198
+ let src = format ! ( r#"<!-- hello "{}" -->"# , "world" . repeat( 512 / 5 ) ) . into_bytes ( ) ;
199
+ let mut buf = Vec :: with_capacity ( 1024 ) ;
200
+ b. iter ( || {
201
+ let mut r = Reader :: from_reader ( src. as_ref ( ) ) ;
202
+ let mut nbtxt = test:: black_box ( 0 ) ;
203
+ r. check_end_names ( false )
204
+ . check_comments ( false )
205
+ . trim_text ( true ) ;
206
+ match r. read_event ( & mut buf) {
207
+ Ok ( Event :: Comment ( ref e) ) => nbtxt += e. unescaped ( ) . unwrap ( ) . len ( ) ,
208
+ something_else => panic ! ( "Did not expect {:?}" , something_else) ,
209
+ } ;
210
+
211
+ buf. clear ( ) ;
212
+
213
+ assert_eq ! ( nbtxt, 520 ) ;
214
+ } )
215
+ }
216
+
217
+ #[ bench]
218
+ fn bench_quick_xml_one_cdata_event_trimmed ( b : & mut Bencher ) {
219
+ let src = format ! ( r#"<![CDATA[hello "{}"]]>"# , "world" . repeat( 512 / 5 ) ) . into_bytes ( ) ;
220
+ let mut buf = Vec :: with_capacity ( 1024 ) ;
221
+ b. iter ( || {
222
+ let mut r = Reader :: from_reader ( src. as_ref ( ) ) ;
223
+ let mut nbtxt = test:: black_box ( 0 ) ;
224
+ r. check_end_names ( false )
225
+ . check_comments ( false )
226
+ . trim_text ( true ) ;
227
+ match r. read_event ( & mut buf) {
228
+ Ok ( Event :: CData ( ref e) ) => nbtxt += e. unescaped ( ) . unwrap ( ) . len ( ) ,
229
+ something_else => panic ! ( "Did not expect {:?}" , something_else) ,
230
+ } ;
231
+
232
+ buf. clear ( ) ;
233
+
234
+ assert_eq ! ( nbtxt, 518 ) ;
235
+ } )
236
+ }
0 commit comments