multi_search

Function multi_search 

Source
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}