pub fn multi_search<'a, 'e, F: Symbol + Ranked, Q: State, X: Family + Ord + Clone>(
automata: &'a [&'e Automaton<Rank<Convoluted<F>>, Q, NoLabel>],
patterns: Vec<Convoluted<Pattern<F, X>>>,
kill_signal: Option<Receiver<()>>,
) -> Mux<TermFragment<'a, [&'e Automaton<Rank<Convoluted<F>>, Q, NoLabel>], Rank<Convoluted<F>>, Indexed<Q>, SearchContext<F, Indexed<Q>, X>, Convoluted<Pattern<F, X>>>>Examples found in repository?
examples/false.rs (line 68)
62fn assert_multi_search<F: Ranked + Symbol + Ord, Q: State, X: Family + Ord>(automata: &[&Automaton<Rank<Convoluted<F>>, Q, NoLabel>], mut patterns: Vec<Vec<Pattern<F, X>>>, mut expected_output: Vec<Vec<Term<Rank<Convoluted<F>>>>>) {
63 // prepare the patterns.
64 let convoluted_patterns = patterns.drain(..).map(|patterns| {
65 Convoluted(patterns.into_iter().map(|p| MaybeBottom::Some(p)).collect())
66 }).collect();
67
68 let it = aligned::multi_search(automata, convoluted_patterns, None);
69
70 let mut output: Vec<Vec<Term<Rank<Convoluted<F>>>>> = Vec::with_capacity(expected_output.len());
71 for terms in it {
72 let terms = terms.unwrap();
73
74 #[cfg(debug_assertions)]
75 {
76 if output.len() >= expected_output.len() {
77 for terms in output.iter() {
78 println!("FOUND {}", PList(terms));
79 }
80 println!("FOUND {}", PList(&terms));
81 }
82 }
83 assert!(output.len() < expected_output.len());
84 output.push(terms)
85 }
86
87 let mut expected_output_set = HashSet::new();
88 for e in expected_output.drain(..) {
89 expected_output_set.insert(e);
90 }
91
92 #[cfg(debug_assertions)]
93 {
94 if output.len() != expected_output_set.len() {
95 println!("EXPECTED OUTPUT:");
96 for terms in expected_output_set.iter() {
97 println!("{}", PList(terms));
98 }
99 println!("\nOUTPUT:");
100 for terms in output.iter() {
101 println!("{}", PList(terms));
102 }
103 }
104 }
105
106 assert!(output.len() == expected_output_set.len());
107
108 for terms in output.iter() {
109 #[cfg(debug_assertions)]
110 {
111 if !expected_output_set.contains(terms) {
112 println!("UNEXPECTED TERM: {}", PList(terms));
113 }
114 }
115
116 assert!(expected_output_set.contains(terms));
117 }
118}