1 use criterion::{black_box, criterion_group, criterion_main, Criterion};
2 use regex::Regex;
3 use wildmatch::WildMatch;
4
5 const TEXT: &str = "Lorem ipsum dolor sit amet, \
6 consetetur sadipscing elitr, sed diam nonumy eirmod tempor \
7 invidunt ut labore et dolore magna aliquyam erat, sed diam \
8 voluptua. At vero eos et accusam et justo duo dolores et ea \
9 rebum. Stet clita kasd gubergren, no sea takimata sanctus est \
10 Lorem ipsum dolor sit amet.";
11
12 const FULL_TEXT_PATTERN: &str = TEXT;
13 const FULL_TEXT_REGEX: &str = "^Lorem ipsum dolor sit amet, \
14 consetetur sadipscing elitr, sed diam nonumy eirmod tempor \
15 invidunt ut labore et dolore magna aliquyam erat, sed diam \
16 voluptua\\. At vero eos et accusam et justo duo dolores et ea \
17 rebum\\. Stet clita kasd gubergren, no sea takimata sanctus est \
18 Lorem ipsum dolor sit amet\\.$";
19
20 const COMPLEX_PATTERN: &str = "Lorem?ipsum*dolore*ea* ?????ata*.";
21 const COMPLEX_REGEX: &str = "^Lorem.ipsum.*dolore.*ea.* .....ata.*\\.$";
22
23 const MOST_COMPLEX_PATTERN: &str = "?a*b*?**c?d****?e*f*g*?*h?i*?*?**j*******k";
24 const MOST_COMPLEX_REGEX: &str =
25 "^.a.*b.*..*.*c.d.*.*.*.*.e.*f.*g.*..*h.i.*..*..*.*j.*.*.*.*.*.*.*k$";
26
compiling(c: &mut Criterion)27 pub fn compiling(c: &mut Criterion) {
28 let mut group = c.benchmark_group("compiling");
29
30 group.bench_function("compile text (wildmatch)", |b| {
31 b.iter(|| WildMatch::new(black_box(FULL_TEXT_PATTERN)))
32 });
33 group.bench_function("compile complex (wildmatch)", |b| {
34 b.iter(|| WildMatch::new(black_box(MOST_COMPLEX_PATTERN)))
35 });
36
37 group.bench_function("compile text (regex)", |b| {
38 b.iter(|| Regex::new(black_box(FULL_TEXT_REGEX)).unwrap())
39 });
40 group.bench_function("compile complex (regex)", |b| {
41 b.iter(|| Regex::new(black_box(MOST_COMPLEX_REGEX)).unwrap())
42 });
43 }
44
matching(c: &mut Criterion)45 pub fn matching(c: &mut Criterion) {
46 let pattern1 = WildMatch::new(FULL_TEXT_PATTERN);
47 let pattern2 = WildMatch::new(COMPLEX_PATTERN);
48 let regex1 = Regex::new(FULL_TEXT_REGEX).unwrap();
49 let regex2 = Regex::new(COMPLEX_REGEX).unwrap();
50
51 let mut group = c.benchmark_group("matching");
52
53 group.bench_function("match text (wildmatch)", |b| {
54 b.iter(|| pattern1 == black_box(TEXT))
55 });
56 group.bench_function("match complex (wildmatch)", |b| {
57 b.iter(|| pattern2 == black_box(TEXT))
58 });
59
60 group.bench_function("match text (regex)", |b| {
61 b.iter(|| regex1.is_match(black_box(TEXT)))
62 });
63 group.bench_function("match complex (regex)", |b| {
64 b.iter(|| regex2.is_match(black_box(TEXT)))
65 });
66 }
67
68 criterion_group!(benches, compiling, matching);
69 criterion_main!(benches);
70