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