1 use regex_automata::{dense, DFA};
2 
3 // A regression test for checking that minimization correctly translates
4 // whether a state is a match state or not. Previously, it was possible for
5 // minimization to mark a non-matching state as matching.
6 #[test]
minimize_sets_correct_match_states()7 fn minimize_sets_correct_match_states() {
8     let pattern =
9         // This is a subset of the grapheme matching regex. I couldn't seem
10         // to get a repro any smaller than this unfortunately.
11         r"(?x)
12             (?:
13                 \p{gcb=Prepend}*
14                 (?:
15                     (?:
16                         (?:
17                             \p{gcb=L}*
18                             (?:\p{gcb=V}+|\p{gcb=LV}\p{gcb=V}*|\p{gcb=LVT})
19                             \p{gcb=T}*
20                         )
21                         |
22                         \p{gcb=L}+
23                         |
24                         \p{gcb=T}+
25                     )
26                     |
27                     \p{Extended_Pictographic}
28                     (?:\p{gcb=Extend}*\p{gcb=ZWJ}\p{Extended_Pictographic})*
29                     |
30                     [^\p{gcb=Control}\p{gcb=CR}\p{gcb=LF}]
31                 )
32                 [\p{gcb=Extend}\p{gcb=ZWJ}\p{gcb=SpacingMark}]*
33             )
34         ";
35 
36     let dfa = dense::Builder::new()
37         .minimize(true)
38         .anchored(true)
39         .build(pattern)
40         .unwrap();
41     assert_eq!(None, dfa.find(b"\xE2"));
42 }
43