@@ -121,3 +121,110 @@ fn test_utf16_code_units() {
121
121
assert_eq ! ( Utf16Encoder :: new( vec![ 'é' , '\u{1F4A9}' ] . into_iter( ) ) . collect:: <Vec <u16 >>( ) ,
122
122
vec![ 0xE9 , 0xD83D , 0xDCA9 ] )
123
123
}
124
+
125
+
126
+ // rm x86_64-unknown-linux-gnu/stage1/test/coretesttest-x86_64-unknown-linux-gnu; env PLEASE_BENCH=1 make check-stage1-coretest TESTNAME=str::bench
127
+
128
+ mod bench {
129
+ macro_rules! make_test_inner {
130
+ ( $s: ident, $code: expr, $name: ident, $str: expr) => {
131
+ #[ bench]
132
+ fn $name( bencher: & mut Bencher ) {
133
+ let mut $s = $str;
134
+ black_box( & mut $s) ;
135
+ bencher. iter( || $code) ;
136
+ }
137
+ }
138
+ }
139
+
140
+ macro_rules! make_test {
141
+ ( $name: ident, $s: ident, $code: expr) => {
142
+ mod $name {
143
+ use test:: Bencher ;
144
+ use test:: black_box;
145
+
146
+ // Short strings: 65 bytes each
147
+ make_test_inner!( $s, $code, short_ascii,
148
+ "Mary had a little lamb, Little lamb Mary had a littl lamb, lamb!" ) ;
149
+ make_test_inner!( $s, $code, short_mixed,
150
+ "ศไทย中华Việt Nam; Mary had a little lamb, Little lam!" ) ;
151
+ make_test_inner!( $s, $code, short_pile_of_poo,
152
+ "💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩!" ) ;
153
+ make_test_inner!( $s, $code, long_lorem_ipsum, "\
154
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
155
+ ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \
156
+ eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \
157
+ sem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec \
158
+ tempus vel, gravida nec quam.
159
+
160
+ In est dui, tincidunt sed tempus interdum, adipiscing laoreet ante. Etiam tempor, tellus quis \
161
+ sagittis interdum, nulla purus mattis sem, quis auctor erat odio ac tellus. In nec nunc sit amet \
162
+ diam volutpat molestie at sed ipsum. Vestibulum laoreet consequat vulputate. Integer accumsan \
163
+ lorem ac dignissim placerat. Suspendisse convallis faucibus lorem. Aliquam erat volutpat. In vel \
164
+ eleifend felis. Sed suscipit nulla lorem, sed mollis est sollicitudin et. Nam fermentum egestas \
165
+ interdum. Curabitur ut nisi justo.
166
+
167
+ Sed sollicitudin ipsum tellus, ut condimentum leo eleifend nec. Cras ut velit ante. Phasellus nec \
168
+ mollis odio. Mauris molestie erat in arcu mattis, at aliquet dolor vehicula. Quisque malesuada \
169
+ lectus sit amet nisi pretium, a condimentum ipsum porta. Morbi at dapibus diam. Praesent egestas \
170
+ est sed risus elementum, eu rutrum metus ultrices. Etiam fermentum consectetur magna, id rutrum \
171
+ felis accumsan a. Aliquam ut pellentesque libero. Sed mi nulla, lobortis eu tortor id, suscipit \
172
+ ultricies neque. Morbi iaculis sit amet risus at iaculis. Praesent eget ligula quis turpis \
173
+ feugiat suscipit vel non arcu. Interdum et malesuada fames ac ante ipsum primis in faucibus. \
174
+ Aliquam sit amet placerat lorem.
175
+
176
+ Cras a lacus vel ante posuere elementum. Nunc est leo, bibendum ut facilisis vel, bibendum at \
177
+ mauris. Nullam adipiscing diam vel odio ornare, luctus adipiscing mi luctus. Nulla facilisi. \
178
+ Mauris adipiscing bibendum neque, quis adipiscing lectus tempus et. Sed feugiat erat et nisl \
179
+ lobortis pharetra. Donec vitae erat enim. Nullam sit amet felis et quam lacinia tincidunt. Aliquam \
180
+ suscipit dapibus urna. Sed volutpat urna in magna pulvinar volutpat. Phasellus nec tellus ac diam \
181
+ cursus accumsan.
182
+
183
+ Nam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \
184
+ feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet id \
185
+ vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \
186
+ leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \
187
+ malesuada sollicitudin quam eu fermentum!") ;
188
+ }
189
+ }
190
+ }
191
+
192
+ make_test ! ( chars_count, s, s. chars( ) . count( ) ) ;
193
+
194
+ make_test ! ( contains_bang_str, s, s. contains( "!" ) ) ;
195
+ make_test ! ( contains_bang_char, s, s. contains_char( '!' ) ) ;
196
+
197
+ make_test ! ( match_indices_a_str, s, s. match_indices( "a" ) . count( ) ) ;
198
+
199
+ make_test ! ( split_str_a_str, s, s. split_str( "a" ) . count( ) ) ;
200
+
201
+ make_test ! ( trim_ascii_char, s, {
202
+ use std:: ascii:: AsciiExt ;
203
+ s. trim_matches( |& mut : c: char | c. is_ascii( ) )
204
+ } ) ;
205
+ make_test ! ( trim_left_ascii_char, s, {
206
+ use std:: ascii:: AsciiExt ;
207
+ s. trim_left_matches( |& mut : c: char | c. is_ascii( ) )
208
+ } ) ;
209
+ make_test ! ( trim_right_ascii_char, s, {
210
+ use std:: ascii:: AsciiExt ;
211
+ s. trim_right_matches( |& mut : c: char | c. is_ascii( ) )
212
+ } ) ;
213
+
214
+ make_test ! ( find_underscore_char, s, s. find( '_' ) ) ;
215
+ make_test ! ( rfind_underscore_char, s, s. rfind( '_' ) ) ;
216
+ make_test ! ( find_underscore_str, s, s. find_str( "_" ) ) ;
217
+
218
+ make_test ! ( find_zzz_char, s, s. find( '\u{1F4A4}' ) ) ;
219
+ make_test ! ( rfind_zzz_char, s, s. rfind( '\u{1F4A4}' ) ) ;
220
+ make_test ! ( find_zzz_str, s, s. find_str( "\u{1F4A4} " ) ) ;
221
+
222
+ make_test ! ( split_space_char, s, s. split( ' ' ) . count( ) ) ;
223
+ make_test ! ( split_terminator_space_char, s, s. split_terminator( ' ' ) . count( ) ) ;
224
+
225
+ make_test ! ( splitn_space_char, s, s. splitn( 10 , ' ' ) . count( ) ) ;
226
+ make_test ! ( rsplitn_space_char, s, s. rsplitn( 10 , ' ' ) . count( ) ) ;
227
+
228
+ make_test ! ( split_str_space_str, s, s. split_str( " " ) . count( ) ) ;
229
+ make_test ! ( split_str_ad_str, s, s. split_str( "ad" ) . count( ) ) ;
230
+ }
0 commit comments