extern crate levtree; use levtree::CaseSensitiveLevTrie; use levtree::DamerauLevenshteinDistanceCalculator; use levtree::LevTrie; use std::io::BufRead; use std::io::BufReader; 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!("") } }