qptrie 0.2.1

A QP-Trie implementation for Rust
Documentation
use ::Trie;

#[test]
fn test_gen() {
    let mut trie = Trie::default();
    trie.insert(vec![0x12, 0x34, 0x56, 0x78], "12345678");
    trie.insert(vec![0x12, 0x34, 0xab, 0xcd], "1234abcd");
    trie.insert(vec![0x12, 0x34, 0xab, 0xef], "1234abef");
    trie.insert(vec![0x12, 0x31, 0x11, 0x11], "12311111");
    trie.insert(vec![0x12, 0x30, 0x11, 0x11], "12301111");
    trie.insert(vec![0x12, 0xff], "12ff");
    trie.insert(vec![0x12], "12");
    trie.insert(vec![0x12, 0x01], "1201");
    trie.insert(vec![0x12, 0x30, 0x42], "123042");
    trie.insert(vec![0x12, 0x30], "1230");
    trie.insert(vec![0x92, 0x35, 0x00], "923500");

    assert_eq!(trie.get(&vec![0x12, 0x30, 0x11, 0x11]), Some(&"12301111"));

    {
        let prefix = vec![0x12, 0x30];
        let mut it = trie.prefix_iter(&prefix);
        let found = it.next().unwrap();
        assert_eq!(*found.1, "12301111");
        let found = it.next().unwrap();
        assert_eq!(*found.1, "123042");
        assert!(it.next().is_none());
    }

    {
        let prefix = vec![0x12, 0x30];
        let mut it = trie.prefix_iter(&prefix).include_prefix();
        let found = it.next().unwrap();
        assert_eq!(*found.1, "1230");
    }

    {
        let prefix = vec![];
        let mut it = trie.prefix_iter(&prefix);
        let found = it.next().unwrap();
        assert_eq!(*found.1, "12");
    }

    {
        let prefix = vec![0xff];
        let mut it = trie.prefix_iter(&prefix);
        assert!(it.next().is_none());
    }

    assert_eq!(trie.remove(&vec![0xf2, 0x30, 0x42]), false);
    assert_eq!(trie.get(&vec![0x12, 0x30, 0x42]), Some(&"123042"));
    assert_eq!(trie.remove(&vec![0x12, 0x30, 0x42]), true);
    assert_eq!(trie.get(&vec![0x12, 0x30, 0x42]), None);
    assert_eq!(trie.remove(&vec![0x12, 0x30, 0x42]), false);
    assert_eq!(trie.get(&vec![0x12, 0x30, 0x42]), None);

    let mut trie2 = Trie::default();
    trie2.insert("x", "x");
    assert_eq!(trie2.get(&"x"), Some(&"x"));
    assert_eq!(trie2.get_mut(&"x"), Some(&mut "x"));
    assert_eq!(trie2.remove(&"x"), true);
    assert_eq!(trie2.get(&"x"), None);
    assert_eq!(trie2.get_mut(&"x"), None);

    let mut trie3 = Trie::default();
    trie3.insert("z", "z");
    assert!(!trie3.is_empty());
    trie3.remove(&"y");
    assert!(!trie3.is_empty());
    trie3.remove(&"z");
    assert!(trie3.is_empty());
    trie3.insert("x", "x");
    trie3.insert("y", "y");
    trie3.remove(&"y");
    trie3.remove(&"x");
    assert!(trie3.is_empty());
    trie3.insert("x", "x");
    trie3.insert("y", "y");
    trie3.insert("z", "z");
    trie3.remove(&"y");
    assert!(!trie3.is_empty());
    trie3.remove(&"x");
    assert!(!trie3.is_empty());
    trie3.remove(&"z");
    assert!(trie3.is_empty());
}