///|
fn main raise {
// A static route/taxonomy vocabulary; terms may be arbitrary bytes.
let routes : Array[Bytes] = [
b"api", b"api/admin", b"api/admin/audit", b"api/catalog", b"api/catalog/items",
b"assets", b"assets/fonts", b"assets/images",
]
let trie = @louds.trie_from_terms(routes)
assert_true(trie.contains(b"api/admin"))
assert_false(trie.contains(b"api/unknown"))
assert_true(trie.find_node(b"api/") is Some(_))
let matches = trie.terms_with_prefix(b"api/catalog", 10)
assert_eq(matches, [b"api/catalog", b"api/catalog/items"])
let range = trie.prefix_range(b"assets")
assert_eq(range.end - range.start, 3)
let restored = @louds.decode_trie(@louds.encode_trie(trie))
assert_eq(
restored.terms_with_prefix(b"api", 20),
trie.terms_with_prefix(b"api", 20),
)
let report = trie.space_report()
println(
"terms=\{report.logical_items} nodes=\{trie.node_count()} serialized_bytes=\{report.serialized_bytes}",
)
}