use mytrie::Trie; use rand::distributions::{Distribution, Uniform}; use rand::seq::SliceRandom; use std::ops::Range; use std::time::Instant; fn generate_string(length: usize, charset: &[char]) -> String { let mut rng = &mut rand::thread_rng(); charset.choose_multiple(&mut rng, length).collect() } fn generate_samples(count: usize, length: Range, charset: &[char]) -> Vec { let between = Uniform::from(length); let mut rng = rand::thread_rng(); (0..count) .map(|_| generate_string(between.sample(&mut rng), charset)) .collect() } const COUNT: usize = 10_000; fn main() { let charset: Vec = "abcdefghijklnmopqrstuvwxyz".chars().collect(); let mut samples = generate_samples(COUNT, 30..60, &charset); samples.sort(); let begin = Instant::now(); let mut trie = Trie::from(&samples); eprintln!("inserting durated {} ms", begin.elapsed().as_millis()); let begin = Instant::now(); let mut retrieved_samples: Vec = trie.iter_content("").collect(); eprintln!("retrieving durated {} ms", begin.elapsed().as_millis()); retrieved_samples.sort(); assert_eq!(COUNT, retrieved_samples.len()); assert_eq!(&samples, &retrieved_samples); let begin = Instant::now(); for item in samples.iter() { trie.remove(item).unwrap(); } eprintln!("removing durated {} ms", begin.elapsed().as_millis()); assert!(trie.is_empty()) }