poptrie 0.2.0

A pure-rust implementation of poptrie
Documentation
use crate::u32_strides;
use poptrie::Poptrie;

#[test]
fn insert_returns_old_value() {
    let mut trie = Poptrie::new();
    assert_eq!(trie.insert((u32::from_be_bytes([10, 0, 0, 0]), 8), 1u32), None);
    assert_eq!(
        trie.insert((u32::from_be_bytes([10, 0, 0, 0]), 8), 2u32),
        Some(1)
    );
    assert_eq!(trie.lookup(u32::from_be_bytes([10, 0, 1, 1])), Some(&2));
}

#[test]
fn insert_order_does_not_affect_lpm() {
    let mut forward = Poptrie::new();
    forward.insert((u32_strides!(1), 6), 6);
    forward.insert((u32_strides!(1, 1), 12), 12);
    forward.insert((u32_strides!(1, 1, 1), 18), 18);

    let mut reverse = Poptrie::new();
    reverse.insert((u32_strides!(1, 1, 1), 18), 18);
    reverse.insert((u32_strides!(1, 1), 12), 12);
    reverse.insert((u32_strides!(1), 6), 6);

    let lookups = [
        u32_strides!(1, 1),
        u32_strides!(1, 0),
        u32_strides!(0, 1),
        u32_strides!(1, 1, 1),
        0,
    ];

    for addr in lookups {
        assert_eq!(forward.lookup(addr), reverse.lookup(addr),);
    }
}