use crate::{error::TrieInsert, key_repr::Key};
use pretty_assertions::assert_eq;
use super::Trie as GenericTrie;
type Trie<V> = GenericTrie<Key, V>;
fn i(str: &str) -> Vec<Key> {
Key::parse_multiple(str).unwrap()
}
#[test]
fn test_insert() {
let mut trie: Trie<bool> = Trie::new();
trie.insert(&i("abc"), true).unwrap();
trie.insert(&i("abd"), true).unwrap();
trie.insert(&i("aca"), false).unwrap();
let (_, key) = trie.try_get(&i("abfff"));
assert_eq!(key, i("ab").clone());
}
#[test]
fn test_duplicate_insert() {
let mut trie: Trie<bool> = Trie::new();
trie.insert(&i("abc"), true).unwrap();
trie.insert(&i("aca"), true).unwrap();
let output = trie.insert(&i("ab"), false).unwrap_err();
if let TrieInsert::KeyAlreadySet(key) = output {
assert_eq!(key, i("ab").clone(),);
} else {
unreachable!("")
}
}
#[test]
fn test_wrong_get() {
let mut trie: Trie<bool> = Trie::new();
trie.insert(&i("abc"), true).unwrap();
trie.insert(&i("abd"), true).unwrap();
trie.insert(&i("aca"), false).unwrap();
assert!(trie.get(&i("bb")).is_none());
}