Documentation
mod common;
#[test]
fn rbtree() {
    let test = || {
        let mut tree = xsl::collections::RBTreeMap::new();
        let data = common::rand_data(1, 0..1000000);
        for k in data.iter() {
            tree.insert(k.clone(), 0);
        }
        for k in &data {
            tree.remove(k);
        }
    };
    common::repeat(test, 10);
}

#[test]
fn rbtree_timing() {
    let mut tree = std::collections::BTreeMap::new();
    let data = common::rand_data(1000000, 0..1000000);
    let test_insert = || {
        for k in data.iter() {
            tree.insert(k.clone(), 0);
        }
    };
    let duration = common::timing(test_insert);
    println!("btree insert: {:?}", duration);
    let test_find = || {
        for k in &data {
            tree.get(k);
        }
    };
    let duration = common::timing(test_find);
    println!("btree find: {:?}", duration);
    let test_remove = || {
        for k in &data {
            tree.remove(k);
        }
    };
    let duration = common::timing(test_remove);
    println!("btree remove: {:?}", duration);
    let mut tree = xsl::collections::RBTreeMap::new();
    let data = common::rand_data(1000000, 0..1000000);
    let test_insert = || {
        for k in data.iter() {
            tree.insert(k.clone(), 0);
        }
    };
    let duration = common::timing(test_insert);
    println!("rbtree insert: {:?}", duration);
    let test_find = || {
        for k in &data {
            tree.get(k);
        }
    };
    let duration = common::timing(test_find);
    println!("rbtree find: {:?}", duration);
    let test_remove = || {
        for k in &data {
            tree.remove(k);
        }
    };
    let duration = common::timing(test_remove);
    println!("rbtree remove: {:?}", duration);
}

#[test]
fn fuzzy_finder() {
    let mut finder = xsl::collections::FuzzyFinder::default();
    finder.insert("hello".to_string(), 1);
    assert_eq!(finder.search("hello".to_string()), Some(vec![&1]));
    assert_eq!(finder.search("world".to_string()), None);
    finder.insert("ello".to_string(), 2);
    assert_eq!(finder.search_prefix("he".to_string()), Some(vec![&1]));
    assert_eq!(finder.search_prefix("e".to_string()), Some(vec![&2, &1]));
    assert_eq!(finder.search_prefix("w".to_string()), None);
}