mytrie 0.2.2

Trie implmentation
Documentation
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<usize>, charset: &[char]) -> Vec<String> {
    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<char> = "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<String> = 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())
}