Skip to content

Commit d68eb3d

Browse files
committed
Added benchmarks for string pattern matching functions
1 parent 522d09d commit d68eb3d

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

src/libcoretest/str.rs

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,110 @@ fn test_utf16_code_units() {
121121
assert_eq!(Utf16Encoder::new(vec!['é', '\u{1F4A9}'].into_iter()).collect::<Vec<u16>>(),
122122
vec![0xE9, 0xD83D, 0xDCA9])
123123
}
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

Comments
 (0)