1c67d6573Sopenharmony_ci#![allow(non_snake_case)]
2c67d6573Sopenharmony_ci
3c67d6573Sopenharmony_ciuse std::iter::repeat;
4c67d6573Sopenharmony_ci
5c67d6573Sopenharmony_ciuse test::Bencher;
6c67d6573Sopenharmony_ci
7c67d6573Sopenharmony_ci#[cfg(any(feature = "re-rust", feature = "re-rust-bytes"))]
8c67d6573Sopenharmony_ciuse crate::RegexSet;
9c67d6573Sopenharmony_ciuse crate::{Regex, Text};
10c67d6573Sopenharmony_ci
11c67d6573Sopenharmony_ci#[cfg(not(feature = "re-onig"))]
12c67d6573Sopenharmony_ci#[cfg(not(feature = "re-pcre1"))]
13c67d6573Sopenharmony_ci#[cfg(not(feature = "re-pcre2"))]
14c67d6573Sopenharmony_cibench_match!(
15c67d6573Sopenharmony_ci    no_exponential,
16c67d6573Sopenharmony_ci    {
17c67d6573Sopenharmony_ci        format!(
18c67d6573Sopenharmony_ci            "{}{}",
19c67d6573Sopenharmony_ci            repeat("a?").take(100).collect::<String>(),
20c67d6573Sopenharmony_ci            repeat("a").take(100).collect::<String>()
21c67d6573Sopenharmony_ci        )
22c67d6573Sopenharmony_ci    },
23c67d6573Sopenharmony_ci    repeat("a").take(100).collect()
24c67d6573Sopenharmony_ci);
25c67d6573Sopenharmony_ci
26c67d6573Sopenharmony_cibench_match!(literal, r"y", {
27c67d6573Sopenharmony_ci    format!("{}y", repeat("x").take(50).collect::<String>())
28c67d6573Sopenharmony_ci});
29c67d6573Sopenharmony_ci
30c67d6573Sopenharmony_cibench_match!(not_literal, r".y", {
31c67d6573Sopenharmony_ci    format!("{}y", repeat("x").take(50).collect::<String>())
32c67d6573Sopenharmony_ci});
33c67d6573Sopenharmony_ci
34c67d6573Sopenharmony_cibench_match!(match_class, "[abcdw]", {
35c67d6573Sopenharmony_ci    format!("{}w", repeat("xxxx").take(20).collect::<String>())
36c67d6573Sopenharmony_ci});
37c67d6573Sopenharmony_ci
38c67d6573Sopenharmony_cibench_match!(match_class_in_range, "[ac]", {
39c67d6573Sopenharmony_ci    format!("{}c", repeat("bbbb").take(20).collect::<String>())
40c67d6573Sopenharmony_ci});
41c67d6573Sopenharmony_ci
42c67d6573Sopenharmony_ci#[cfg(not(feature = "re-rust-bytes"))]
43c67d6573Sopenharmony_ci#[cfg(not(feature = "re-tcl"))]
44c67d6573Sopenharmony_cibench_match!(match_class_unicode, r"\p{L}", {
45c67d6573Sopenharmony_ci    format!("{}a", repeat("☃5☃5").take(20).collect::<String>())
46c67d6573Sopenharmony_ci});
47c67d6573Sopenharmony_ci
48c67d6573Sopenharmony_cibench_not_match!(anchored_literal_short_non_match, r"^zbc(d|e)", {
49c67d6573Sopenharmony_ci    "abcdefghijklmnopqrstuvwxyz".to_owned()
50c67d6573Sopenharmony_ci});
51c67d6573Sopenharmony_ci
52c67d6573Sopenharmony_cibench_not_match!(anchored_literal_long_non_match, r"^zbc(d|e)", {
53c67d6573Sopenharmony_ci    repeat("abcdefghijklmnopqrstuvwxyz").take(15).collect::<String>()
54c67d6573Sopenharmony_ci});
55c67d6573Sopenharmony_ci
56c67d6573Sopenharmony_cibench_match!(anchored_literal_short_match, r"^.bc(d|e)", {
57c67d6573Sopenharmony_ci    "abcdefghijklmnopqrstuvwxyz".to_owned()
58c67d6573Sopenharmony_ci});
59c67d6573Sopenharmony_ci
60c67d6573Sopenharmony_cibench_match!(anchored_literal_long_match, r"^.bc(d|e)", {
61c67d6573Sopenharmony_ci    repeat("abcdefghijklmnopqrstuvwxyz").take(15).collect::<String>()
62c67d6573Sopenharmony_ci});
63c67d6573Sopenharmony_ci
64c67d6573Sopenharmony_cibench_match!(one_pass_short, r"^.bc(d|e)*$", {
65c67d6573Sopenharmony_ci    "abcddddddeeeededd".to_owned()
66c67d6573Sopenharmony_ci});
67c67d6573Sopenharmony_ci
68c67d6573Sopenharmony_cibench_match!(one_pass_short_not, r".bc(d|e)*$", {
69c67d6573Sopenharmony_ci    "abcddddddeeeededd".to_owned()
70c67d6573Sopenharmony_ci});
71c67d6573Sopenharmony_ci
72c67d6573Sopenharmony_cibench_match!(one_pass_long_prefix, r"^abcdefghijklmnopqrstuvwxyz.*$", {
73c67d6573Sopenharmony_ci    "abcdefghijklmnopqrstuvwxyz".to_owned()
74c67d6573Sopenharmony_ci});
75c67d6573Sopenharmony_ci
76c67d6573Sopenharmony_cibench_match!(one_pass_long_prefix_not, r"^.bcdefghijklmnopqrstuvwxyz.*$", {
77c67d6573Sopenharmony_ci    "abcdefghijklmnopqrstuvwxyz".to_owned()
78c67d6573Sopenharmony_ci});
79c67d6573Sopenharmony_ci
80c67d6573Sopenharmony_cibench_match!(long_needle1, r"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", {
81c67d6573Sopenharmony_ci    repeat("a").take(100_000).collect::<String>() + "b"
82c67d6573Sopenharmony_ci});
83c67d6573Sopenharmony_ci
84c67d6573Sopenharmony_cibench_match!(long_needle2, r"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbba", {
85c67d6573Sopenharmony_ci    repeat("b").take(100_000).collect::<String>() + "a"
86c67d6573Sopenharmony_ci});
87c67d6573Sopenharmony_ci
88c67d6573Sopenharmony_ci// This benchmark specifically targets the "reverse suffix literal"
89c67d6573Sopenharmony_ci// optimization. In particular, it is easy for a naive implementation to
90c67d6573Sopenharmony_ci// take quadratic worst case time. This benchmark provides a case for such
91c67d6573Sopenharmony_ci// a scenario.
92c67d6573Sopenharmony_cibench_not_match!(reverse_suffix_no_quadratic, r"[r-z].*bcdefghijklmnopq", {
93c67d6573Sopenharmony_ci    repeat("bcdefghijklmnopq").take(500).collect::<String>()
94c67d6573Sopenharmony_ci});
95c67d6573Sopenharmony_ci
96c67d6573Sopenharmony_ci#[cfg(feature = "re-rust")]
97c67d6573Sopenharmony_ci#[bench]
98c67d6573Sopenharmony_cifn replace_all(b: &mut Bencher) {
99c67d6573Sopenharmony_ci    let re = regex!("[cjrw]");
100c67d6573Sopenharmony_ci    let text = "abcdefghijklmnopqrstuvwxyz";
101c67d6573Sopenharmony_ci    b.iter(|| re.replace_all(text, ""));
102c67d6573Sopenharmony_ci}
103c67d6573Sopenharmony_ci
104c67d6573Sopenharmony_ciconst TXT_32: &'static str = include_str!("data/32.txt");
105c67d6573Sopenharmony_ciconst TXT_1K: &'static str = include_str!("data/1K.txt");
106c67d6573Sopenharmony_ciconst TXT_32K: &'static str = include_str!("data/32K.txt");
107c67d6573Sopenharmony_ciconst TXT_1MB: &'static str = include_str!("data/1MB.txt");
108c67d6573Sopenharmony_ci
109c67d6573Sopenharmony_cifn get_text(corpus: &str, suffix: String) -> String {
110c67d6573Sopenharmony_ci    let mut corpus = corpus.to_string();
111c67d6573Sopenharmony_ci    corpus.push_str(&suffix);
112c67d6573Sopenharmony_ci    corpus
113c67d6573Sopenharmony_ci}
114c67d6573Sopenharmony_ci
115c67d6573Sopenharmony_cifn easy0_suffix() -> String {
116c67d6573Sopenharmony_ci    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_string()
117c67d6573Sopenharmony_ci}
118c67d6573Sopenharmony_ci
119c67d6573Sopenharmony_cimacro_rules! easy0 {
120c67d6573Sopenharmony_ci    () => {
121c67d6573Sopenharmony_ci        "ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
122c67d6573Sopenharmony_ci    };
123c67d6573Sopenharmony_ci}
124c67d6573Sopenharmony_ci
125c67d6573Sopenharmony_cibench_match!(easy0_32, easy0!(), get_text(TXT_32, easy0_suffix()));
126c67d6573Sopenharmony_cibench_match!(easy0_1K, easy0!(), get_text(TXT_1K, easy0_suffix()));
127c67d6573Sopenharmony_cibench_match!(easy0_32K, easy0!(), get_text(TXT_32K, easy0_suffix()));
128c67d6573Sopenharmony_cibench_match!(easy0_1MB, easy0!(), get_text(TXT_1MB, easy0_suffix()));
129c67d6573Sopenharmony_ci
130c67d6573Sopenharmony_cifn easy1_suffix() -> String {
131c67d6573Sopenharmony_ci    "AABCCCDEEEFGGHHHIJJ".to_string()
132c67d6573Sopenharmony_ci}
133c67d6573Sopenharmony_ci
134c67d6573Sopenharmony_cimacro_rules! easy1 {
135c67d6573Sopenharmony_ci    () => {
136c67d6573Sopenharmony_ci        r"A[AB]B[BC]C[CD]D[DE]E[EF]F[FG]G[GH]H[HI]I[IJ]J$"
137c67d6573Sopenharmony_ci    };
138c67d6573Sopenharmony_ci}
139c67d6573Sopenharmony_ci
140c67d6573Sopenharmony_cibench_match!(easy1_32, easy1!(), get_text(TXT_32, easy1_suffix()));
141c67d6573Sopenharmony_cibench_match!(easy1_1K, easy1!(), get_text(TXT_1K, easy1_suffix()));
142c67d6573Sopenharmony_cibench_match!(easy1_32K, easy1!(), get_text(TXT_32K, easy1_suffix()));
143c67d6573Sopenharmony_cibench_match!(easy1_1MB, easy1!(), get_text(TXT_1MB, easy1_suffix()));
144c67d6573Sopenharmony_ci
145c67d6573Sopenharmony_cifn medium_suffix() -> String {
146c67d6573Sopenharmony_ci    "XABCDEFGHIJKLMNOPQRSTUVWXYZ".to_string()
147c67d6573Sopenharmony_ci}
148c67d6573Sopenharmony_ci
149c67d6573Sopenharmony_cimacro_rules! medium {
150c67d6573Sopenharmony_ci    () => {
151c67d6573Sopenharmony_ci        r"[XYZ]ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
152c67d6573Sopenharmony_ci    };
153c67d6573Sopenharmony_ci}
154c67d6573Sopenharmony_ci
155c67d6573Sopenharmony_cibench_match!(medium_32, medium!(), get_text(TXT_32, medium_suffix()));
156c67d6573Sopenharmony_cibench_match!(medium_1K, medium!(), get_text(TXT_1K, medium_suffix()));
157c67d6573Sopenharmony_cibench_match!(medium_32K, medium!(), get_text(TXT_32K, medium_suffix()));
158c67d6573Sopenharmony_cibench_match!(medium_1MB, medium!(), get_text(TXT_1MB, medium_suffix()));
159c67d6573Sopenharmony_ci
160c67d6573Sopenharmony_cifn hard_suffix() -> String {
161c67d6573Sopenharmony_ci    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_string()
162c67d6573Sopenharmony_ci}
163c67d6573Sopenharmony_ci
164c67d6573Sopenharmony_cimacro_rules! hard {
165c67d6573Sopenharmony_ci    () => {
166c67d6573Sopenharmony_ci        r"[ -~]*ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
167c67d6573Sopenharmony_ci    };
168c67d6573Sopenharmony_ci}
169c67d6573Sopenharmony_ci
170c67d6573Sopenharmony_cibench_match!(hard_32, hard!(), get_text(TXT_32, hard_suffix()));
171c67d6573Sopenharmony_cibench_match!(hard_1K, hard!(), get_text(TXT_1K, hard_suffix()));
172c67d6573Sopenharmony_cibench_match!(hard_32K, hard!(), get_text(TXT_32K, hard_suffix()));
173c67d6573Sopenharmony_cibench_match!(hard_1MB, hard!(), get_text(TXT_1MB, hard_suffix()));
174c67d6573Sopenharmony_ci
175c67d6573Sopenharmony_cifn reallyhard_suffix() -> String {
176c67d6573Sopenharmony_ci    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_string()
177c67d6573Sopenharmony_ci}
178c67d6573Sopenharmony_ci
179c67d6573Sopenharmony_cimacro_rules! reallyhard {
180c67d6573Sopenharmony_ci    () => {
181c67d6573Sopenharmony_ci        // The point of this being "really" hard is that it should completely
182c67d6573Sopenharmony_ci        // thwart any prefix or suffix literal optimizations.
183c67d6573Sopenharmony_ci        r"[ -~]*ABCDEFGHIJKLMNOPQRSTUVWXYZ.*"
184c67d6573Sopenharmony_ci    };
185c67d6573Sopenharmony_ci}
186c67d6573Sopenharmony_ci
187c67d6573Sopenharmony_cibench_match!(
188c67d6573Sopenharmony_ci    reallyhard_32,
189c67d6573Sopenharmony_ci    reallyhard!(),
190c67d6573Sopenharmony_ci    get_text(TXT_32, reallyhard_suffix())
191c67d6573Sopenharmony_ci);
192c67d6573Sopenharmony_cibench_match!(
193c67d6573Sopenharmony_ci    reallyhard_1K,
194c67d6573Sopenharmony_ci    reallyhard!(),
195c67d6573Sopenharmony_ci    get_text(TXT_1K, reallyhard_suffix())
196c67d6573Sopenharmony_ci);
197c67d6573Sopenharmony_cibench_match!(
198c67d6573Sopenharmony_ci    reallyhard_32K,
199c67d6573Sopenharmony_ci    reallyhard!(),
200c67d6573Sopenharmony_ci    get_text(TXT_32K, reallyhard_suffix())
201c67d6573Sopenharmony_ci);
202c67d6573Sopenharmony_cibench_match!(
203c67d6573Sopenharmony_ci    reallyhard_1MB,
204c67d6573Sopenharmony_ci    reallyhard!(),
205c67d6573Sopenharmony_ci    get_text(TXT_1MB, reallyhard_suffix())
206c67d6573Sopenharmony_ci);
207c67d6573Sopenharmony_ci
208c67d6573Sopenharmony_cifn reallyhard2_suffix() -> String {
209c67d6573Sopenharmony_ci    "Sherlock Holmes".to_string()
210c67d6573Sopenharmony_ci}
211c67d6573Sopenharmony_ci
212c67d6573Sopenharmony_cimacro_rules! reallyhard2 {
213c67d6573Sopenharmony_ci    () => {
214c67d6573Sopenharmony_ci        r"\w+\s+Holmes"
215c67d6573Sopenharmony_ci    };
216c67d6573Sopenharmony_ci}
217c67d6573Sopenharmony_ci
218c67d6573Sopenharmony_cibench_match!(
219c67d6573Sopenharmony_ci    reallyhard2_1K,
220c67d6573Sopenharmony_ci    reallyhard2!(),
221c67d6573Sopenharmony_ci    get_text(TXT_1K, reallyhard2_suffix())
222c67d6573Sopenharmony_ci);
223c67d6573Sopenharmony_ci
224c67d6573Sopenharmony_ci//
225c67d6573Sopenharmony_ci// Benchmarks to justify the short-haystack NFA fallthrough optimization
226c67d6573Sopenharmony_ci// implemented by `read_captures_at` in regex/src/exec.rs. See github issue
227c67d6573Sopenharmony_ci// #348.
228c67d6573Sopenharmony_ci//
229c67d6573Sopenharmony_ci// The procedure used to try to determine the right hardcoded cutoff
230c67d6573Sopenharmony_ci// for the short-haystack optimization in issue #348 is as follows.
231c67d6573Sopenharmony_ci//
232c67d6573Sopenharmony_ci// ```
233c67d6573Sopenharmony_ci// > cd bench
234c67d6573Sopenharmony_ci// > cargo bench --features re-rust short_hay | tee dfa-nfa.res
235c67d6573Sopenharmony_ci// > # modify the `MatchType::Dfa` branch in exec.rs:read_captures_at
236c67d6573Sopenharmony_ci// > # to just execute the nfa
237c67d6573Sopenharmony_ci// > cargo bench --features re-rust short_hay | tee nfa-only.res
238c67d6573Sopenharmony_ci// > cargo benchcmp dfa-nfa.res nfa-only.res
239c67d6573Sopenharmony_ci// ```
240c67d6573Sopenharmony_ci//
241c67d6573Sopenharmony_ci// The expected result is that short inputs will go faster under
242c67d6573Sopenharmony_ci// the nfa-only mode, but at some turnover point the dfa-nfa mode
243c67d6573Sopenharmony_ci// will start to win again. Unfortunately, that is not what happened.
244c67d6573Sopenharmony_ci// Instead there was no noticeable change in the bench results, so
245c67d6573Sopenharmony_ci// I've opted to just do the more conservative anchor optimization.
246c67d6573Sopenharmony_ci//
247c67d6573Sopenharmony_cibench_captures!(
248c67d6573Sopenharmony_ci    short_haystack_1x,
249c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
250c67d6573Sopenharmony_ci    2,
251c67d6573Sopenharmony_ci    String::from("aaaabbbbccccbbbdddd")
252c67d6573Sopenharmony_ci);
253c67d6573Sopenharmony_cibench_captures!(
254c67d6573Sopenharmony_ci    short_haystack_2x,
255c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
256c67d6573Sopenharmony_ci    2,
257c67d6573Sopenharmony_ci    format!(
258c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
259c67d6573Sopenharmony_ci        repeat("aaaa").take(2).collect::<String>(),
260c67d6573Sopenharmony_ci        repeat("dddd").take(2).collect::<String>(),
261c67d6573Sopenharmony_ci    )
262c67d6573Sopenharmony_ci);
263c67d6573Sopenharmony_cibench_captures!(
264c67d6573Sopenharmony_ci    short_haystack_3x,
265c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
266c67d6573Sopenharmony_ci    2,
267c67d6573Sopenharmony_ci    format!(
268c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
269c67d6573Sopenharmony_ci        repeat("aaaa").take(3).collect::<String>(),
270c67d6573Sopenharmony_ci        repeat("dddd").take(3).collect::<String>(),
271c67d6573Sopenharmony_ci    )
272c67d6573Sopenharmony_ci);
273c67d6573Sopenharmony_cibench_captures!(
274c67d6573Sopenharmony_ci    short_haystack_4x,
275c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
276c67d6573Sopenharmony_ci    2,
277c67d6573Sopenharmony_ci    format!(
278c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
279c67d6573Sopenharmony_ci        repeat("aaaa").take(4).collect::<String>(),
280c67d6573Sopenharmony_ci        repeat("dddd").take(4).collect::<String>(),
281c67d6573Sopenharmony_ci    )
282c67d6573Sopenharmony_ci);
283c67d6573Sopenharmony_cibench_captures!(
284c67d6573Sopenharmony_ci    short_haystack_10x,
285c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
286c67d6573Sopenharmony_ci    2,
287c67d6573Sopenharmony_ci    format!(
288c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
289c67d6573Sopenharmony_ci        repeat("aaaa").take(10).collect::<String>(),
290c67d6573Sopenharmony_ci        repeat("dddd").take(10).collect::<String>(),
291c67d6573Sopenharmony_ci    )
292c67d6573Sopenharmony_ci);
293c67d6573Sopenharmony_cibench_captures!(
294c67d6573Sopenharmony_ci    short_haystack_100x,
295c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
296c67d6573Sopenharmony_ci    2,
297c67d6573Sopenharmony_ci    format!(
298c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
299c67d6573Sopenharmony_ci        repeat("aaaa").take(100).collect::<String>(),
300c67d6573Sopenharmony_ci        repeat("dddd").take(100).collect::<String>(),
301c67d6573Sopenharmony_ci    )
302c67d6573Sopenharmony_ci);
303c67d6573Sopenharmony_cibench_captures!(
304c67d6573Sopenharmony_ci    short_haystack_1000x,
305c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
306c67d6573Sopenharmony_ci    2,
307c67d6573Sopenharmony_ci    format!(
308c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
309c67d6573Sopenharmony_ci        repeat("aaaa").take(1000).collect::<String>(),
310c67d6573Sopenharmony_ci        repeat("dddd").take(1000).collect::<String>(),
311c67d6573Sopenharmony_ci    )
312c67d6573Sopenharmony_ci);
313c67d6573Sopenharmony_cibench_captures!(
314c67d6573Sopenharmony_ci    short_haystack_10000x,
315c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
316c67d6573Sopenharmony_ci    2,
317c67d6573Sopenharmony_ci    format!(
318c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
319c67d6573Sopenharmony_ci        repeat("aaaa").take(10000).collect::<String>(),
320c67d6573Sopenharmony_ci        repeat("dddd").take(10000).collect::<String>(),
321c67d6573Sopenharmony_ci    )
322c67d6573Sopenharmony_ci);
323c67d6573Sopenharmony_cibench_captures!(
324c67d6573Sopenharmony_ci    short_haystack_100000x,
325c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
326c67d6573Sopenharmony_ci    2,
327c67d6573Sopenharmony_ci    format!(
328c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
329c67d6573Sopenharmony_ci        repeat("aaaa").take(100000).collect::<String>(),
330c67d6573Sopenharmony_ci        repeat("dddd").take(100000).collect::<String>(),
331c67d6573Sopenharmony_ci    )
332c67d6573Sopenharmony_ci);
333c67d6573Sopenharmony_cibench_captures!(
334c67d6573Sopenharmony_ci    short_haystack_1000000x,
335c67d6573Sopenharmony_ci    Regex::new(r"(bbbb)cccc(bbb)").unwrap(),
336c67d6573Sopenharmony_ci    2,
337c67d6573Sopenharmony_ci    format!(
338c67d6573Sopenharmony_ci        "{}bbbbccccbbb{}",
339c67d6573Sopenharmony_ci        repeat("aaaa").take(1000000).collect::<String>(),
340c67d6573Sopenharmony_ci        repeat("dddd").take(1000000).collect::<String>(),
341c67d6573Sopenharmony_ci    )
342c67d6573Sopenharmony_ci);
343c67d6573Sopenharmony_ci
344c67d6573Sopenharmony_ci#[cfg(any(feature = "re-rust", feature = "re-rust-bytes"))]
345c67d6573Sopenharmony_cibench_is_match_set!(
346c67d6573Sopenharmony_ci    is_match_set,
347c67d6573Sopenharmony_ci    true,
348c67d6573Sopenharmony_ci    RegexSet::new(vec![
349c67d6573Sopenharmony_ci        "aaaaaaaaaaaaaaaaaaa",
350c67d6573Sopenharmony_ci        "abc579",
351c67d6573Sopenharmony_ci        "def.+",
352c67d6573Sopenharmony_ci        "e24fg",
353c67d6573Sopenharmony_ci        "a.*2c",
354c67d6573Sopenharmony_ci        "23.",
355c67d6573Sopenharmony_ci    ])
356c67d6573Sopenharmony_ci    .unwrap(),
357c67d6573Sopenharmony_ci    format!(
358c67d6573Sopenharmony_ci        "{}a482c{}",
359c67d6573Sopenharmony_ci        repeat('a').take(10).collect::<String>(),
360c67d6573Sopenharmony_ci        repeat('b').take(10).collect::<String>()
361c67d6573Sopenharmony_ci    )
362c67d6573Sopenharmony_ci);
363c67d6573Sopenharmony_ci
364c67d6573Sopenharmony_ci#[cfg(any(feature = "re-rust", feature = "re-rust-bytes"))]
365c67d6573Sopenharmony_cibench_matches_set!(
366c67d6573Sopenharmony_ci    matches_set,
367c67d6573Sopenharmony_ci    true,
368c67d6573Sopenharmony_ci    RegexSet::new(vec![
369c67d6573Sopenharmony_ci        "aaaaaaaaaaaaaaaaaaa",
370c67d6573Sopenharmony_ci        "abc579",
371c67d6573Sopenharmony_ci        "def.+",
372c67d6573Sopenharmony_ci        "e24fg",
373c67d6573Sopenharmony_ci        "a.*2c",
374c67d6573Sopenharmony_ci        "23.",
375c67d6573Sopenharmony_ci    ])
376c67d6573Sopenharmony_ci    .unwrap(),
377c67d6573Sopenharmony_ci    format!(
378c67d6573Sopenharmony_ci        "{}a482c{}",
379c67d6573Sopenharmony_ci        repeat('a').take(10).collect::<String>(),
380c67d6573Sopenharmony_ci        repeat('b').take(10).collect::<String>()
381c67d6573Sopenharmony_ci    )
382c67d6573Sopenharmony_ci);
383