def test_trie_dict_hypothesis(): random.seed(0) trials = 10000 size = 8 key_len = 8 for _ in range(trials): t = Trie() normal_dict = {} # insert num_keys = random.randint(0, size) for _ in range(num_keys): key = ''.join( random.choices('a0!///', k=random.randint(1, key_len))) value = str(random.randint(1, key_len)) clean_key = '/'.join(split(key)) t.put(split(key), value) normal_dict[clean_key] = value assert split(key) in t assert t.flatten() == normal_dict assert set(_join_items(t.items([]))) == set(normal_dict.items()) assert set(_join_keys(t.keys([]))) == set(normal_dict.keys()) assert len(t) == len(normal_dict) # clone clone = t.clone() assert t.flatten() == clone.flatten() assert t.to_json() == clone.to_json() assert _join_keys(t.keys([])) == _join_keys(clone.keys([])) assert _join_items(t.items([])) == _join_items(clone.items([])) # delete for key in list(normal_dict.keys()): del normal_dict[key] t.discard(split(key)) assert split(key) not in t assert t.flatten() == normal_dict assert set(_join_items(t.items([]))) == set(normal_dict.items()) assert set(_join_keys(t.keys([]))) == set(normal_dict.keys()) assert len(t) == len(normal_dict)
def test_trie_dict_del_missing_key(): t = Trie() assert t.discard(['x']) is None
def test_trie_dict_del_key(): t = Trie() t.put(['x'], 'value') assert t.discard(['x']) == 'value' assert t.flatten() == {}
def test_trie_dict_del_missing_nested_key(): t = Trie() t.put(['x'], 'value') assert t.discard(['x', 'y']) is None
def test_trie_dict_del_nested_key(): t = Trie() t.put(['x'], 'value1') t.put(['x', 'y'], 'value2') assert t.discard(['x', 'y']) == 'value2' assert t.flatten() == {'x': 'value1'}