use iptrie::Ipv4Prefix;
use iptrie::Ipv4RTrieSet;
use std::net::Ipv4Addr;
fn main() {
let prefixes = ["1.1.0.0/24", "1.1.1.0/24", "1.1.0.0/20", "1.2.2.0/24"];
let iter = prefixes.iter().map(|x| x.parse().unwrap());
let trie = Ipv4RTrieSet::from_iter(iter);
assert_eq!(
trie.lookup(&"1.1.1.2".parse::<Ipv4Addr>().unwrap())
.to_string(),
"1.1.1.0/24"
);
assert_eq!(
trie.lookup(&"1.1.2.2".parse::<Ipv4Addr>().unwrap())
.to_string(),
"1.1.0.0/20"
);
assert_eq!(
trie.lookup(&"1.1.0.0/25".parse::<Ipv4Prefix>().unwrap())
.to_string(),
"1.1.0.0/24"
);
assert_eq!(
trie.lookup(&"1.1.0.0/21".parse::<Ipv4Prefix>().unwrap())
.to_string(),
"1.1.0.0/20"
);
let lctrie = trie.compress();
assert_eq!(
lctrie
.lookup(&"1.1.1.2".parse::<Ipv4Addr>().unwrap())
.to_string(),
"1.1.1.0/24"
);
assert_eq!(
lctrie
.lookup(&"1.1.2.2".parse::<Ipv4Addr>().unwrap())
.to_string(),
"1.1.0.0/20"
);
assert_eq!(
lctrie
.lookup(&"1.1.0.0/25".parse::<Ipv4Prefix>().unwrap())
.to_string(),
"1.1.0.0/24"
);
assert_eq!(
lctrie
.lookup(&"1.1.0.0/21".parse::<Ipv4Prefix>().unwrap())
.to_string(),
"1.1.0.0/20"
);
}