extern crate levtree; use levtree::LevTrie; use levtree::Trie; use levtree::CaseSensitiveKeyChecker; use levtree::CaseSensitiveLevTrie; use levtree::DamerauLevenshteinDistanceCalculator; use std::io::BufReader; use std::io::BufRead; trait IntoCharSlice { fn into_char_slice(&self) -> Vec; } impl IntoCharSlice for str { fn into_char_slice(&self) -> Vec { self.chars().into_iter().collect::>() } } fn main() { let bytes = include_bytes!("cracklib-small"); let reader = BufReader::new(&bytes[..]); let mut trie : CaseSensitiveLevTrie = LevTrie::new(); reader.lines() .map(|line| line.unwrap()) .for_each(|word : String| { trie.add(word.chars()); }); let keys = ["camel", "coriolis", "mattel", "cruzer", "cpoper", "roublesoot"]; for _ in 0..50 { for key in keys { let word = &key.into_char_slice()[..]; trie.fuzzy_search::(word, 6); } } for key in keys { let word = &key.into_char_slice()[..]; let results = trie.fuzzy_search::(word, 6); for result in results { let word : String = trie.lineal_descendant(result.word).into_iter().collect(); println!("distance: {}, wordkey: {}", result.distance, word); } println!("") } }