class DottedKeyTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction=KEY_DOTTED) self.keys = [ 'com.example', 'com.baz', 'com.example.sub', 'org.example' ] for key in self.keys: self.trie.add(key, 1) def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_paths(self): for path in self.trie.paths(): self.assertTrue(path in self.keys, "Trie::paths") paths = list(self.trie.paths()) self.assertTrue(len(paths) == 4, "Trie::paths length") def test_allpathvalues(self): values = self.trie.getAllPathValues('com.example.sub') self.assertTrue(len(values) == 2, "Trie::getAllPathValues") def test_subpaths(self): subpaths = self.trie.getSubPaths('com.example.sub') self.assertTrue(len(subpaths) == 2, "Trie::getSubPaths") self.assertTrue(subpaths[0] == 'com.example', "Trie::getSubPaths") self.assertTrue(subpaths[1] == 'com.example.sub', "Trie::getSubPaths")
class DottedKeyTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction = KEY_DOTTED) self.keys = ['com.example', 'com.baz', 'com.example.sub', 'org.example'] for key in self.keys: self.trie.add(key, 1) def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_paths(self): for path in self.trie.paths(): self.assertTrue(path in self.keys, "Trie::paths") paths = list(self.trie.paths()) self.assertTrue(len(paths) == 4, "Trie::paths length") def test_allpathvalues(self): values = self.trie.getAllPathValues('com.example.sub') self.assertTrue(len(values) == 2, "Trie::getAllPathValues") def test_subpaths(self): subpaths = self.trie.getSubPaths('com.example.sub') self.assertTrue(len(subpaths) == 2, "Trie::getSubPaths") self.assertTrue(subpaths[0] == 'com.example', "Trie::getSubPaths") self.assertTrue(subpaths[1] == 'com.example.sub', "Trie::getSubPaths")
class TriePruneTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction = KEY_DOTTED, storeFunction = STORE_COUNT) self.keys = ['com.example', 'com.example.sub', 'org.example', 'com.other', 'com.other.sub', 'net.example', 'com.example.sub2'] for key in self.keys: self.trie.add(key, 1) def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_outoforder_paths(self): self.trie.add("com.zanzibar") self.trie.add("com.foobar") self.trie.prune('com') comPaths = list(self.trie.paths(prefix = 'com')) self.assertTrue(len(comPaths) == 0, "Trie::paths(prefix)") self.assertTrue(len(self.trie) == 2, "Trie::__len__") def test_paths(self): self.trie.prune('com.example.sub') comPaths = list(self.trie.paths(prefix = 'com')) self.assertTrue(len(comPaths) == 4, "Trie::paths(prefix)") self.trie.prune('com') comPaths = list(self.trie.paths(prefix = 'com')) self.assertTrue(len(comPaths) == 0, "Trie::paths(prefix)") self.assertTrue(len(self.trie) == 2, "Trie::__len__")
class StringKeyTests(unittest.TestCase): def setUp(self): self.trie = Trie() self.keys = ['bar', 'baz', 'barbell', 'foo', 'food', 'bar', 'bazbuzz', 'bazbuzz'] for key in self.keys: self.trie.add(key, 1) def test_paths(self): paths = list(self.trie.paths()) self.assertTrue(len(paths) == 6, "Trie::paths") def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_in(self): for key in self.keys: self.assertTrue(key in self.trie, "Trie::__contains__") def test_get(self): for key in self.keys: self.assertTrue(self.trie.get(key) is not None, "Trie::get") def test_getItem(self): for key in self.keys: self.assertTrue(self.trie[key] is not None, "Trie::__getitem__") def test_remove(self): self.trie.remove('bar', 1) self.trie.remove('baz', 1) self.assertTrue(self.trie.get('bar') == 1, "Trie::remove") self.assertTrue(self.trie.get('baz') is None, "Trie::remove") def test_removeAll(self): self.trie.removeAll('bar') self.assertTrue(self.trie.get('bar') is None, "Trie::removeAll") self.assertTrue(self.trie.get('barbell') is not None, "Trie::removeAll retain leaves") def test_setItem(self): self.trie['blah'] = 1 self.assertTrue(self.trie.get('blah') == 1, "Trie::__setitem__") def test_missingItems(self): notIn = ['bubbles', 'barb', 'bazz'] for key in notIn: self.assertTrue(self.trie.get(key) is None, "Missing items") def test_singleItems(self): for item in ['baz', 'barbell', 'foo', 'food']: self.assertTrue(self.trie.get(item) == 1, "Trie::add non-duplicates") def test_doubleItems(self): for item in ['bar', 'bazbuzz']: self.assertTrue(self.trie.get(item) == [1, 1], "Trie::add duplicates")
class TriePathsTest(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction = KEY_DOTTED, storeFunction = STORE_COUNT) self.keys = ['com.example', 'com.example.sub', 'org.example', 'com.other', 'com.other.sub', 'net.example', 'com.example.sub2'] for key in self.keys: self.trie.add(key, 1) def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_paths(self): comPaths = list(self.trie.paths(prefix = 'com')) examplePaths = list(self.trie.paths(prefix = 'com.example')) self.assertTrue(len(comPaths) == 5, "Trie::paths(prefix)") self.assertTrue(len(examplePaths) == 3, "Trie::paths(prefix)")
class StoreCountTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction=KEY_DOTTED, storeFunction=STORE_COUNT) self.keys = [ 'com.example', 'com.baz', 'com.example.sub', 'org.example', 'com.example', 'com.example.sub', 'com.example.sub' ] for key in self.keys: self.trie.add(key, 1) def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_paths(self): for path in self.trie.paths(): self.assertTrue(path in self.keys, "Trie::paths") paths = list(self.trie.paths()) self.assertTrue(len(paths) == 4, "Trie::paths length") def test_counts(self): countParts = {'com.example': 2, 'com.baz': 1, 'com.example.sub': 3} for countPart in countParts.items(): val = self.trie.get(countPart[0]) self.assertTrue(val == countPart[1], "Trie::get with STORE_COUNT") def test_removes(self): self.trie.remove('org.example') self.trie.remove('com.example') self.assertTrue( self.trie.get('org.example') is None, "remove single path") self.assertTrue( self.trie.get('com.example') == 1, "remove double path")
class StoreCountTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction = KEY_DOTTED, storeFunction = STORE_COUNT) self.keys = ['com.example', 'com.baz', 'com.example.sub', 'org.example', 'com.example', 'com.example.sub', 'com.example.sub'] for key in self.keys: self.trie.add(key, 1) def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_paths(self): for path in self.trie.paths(): self.assertTrue(path in self.keys, "Trie::paths") paths = list(self.trie.paths()) self.assertTrue(len(paths) == 4, "Trie::paths length") def test_counts(self): countParts = { 'com.example': 2, 'com.baz': 1, 'com.example.sub': 3 } for countPart in countParts.items(): val = self.trie.get(countPart[0]) self.assertTrue(val == countPart[1], "Trie::get with STORE_COUNT") def test_removes(self): self.trie.remove('org.example') self.trie.remove('com.example') self.assertTrue(self.trie.get('org.example') is None, "remove single path") self.assertTrue(self.trie.get('com.example') == 1, "remove double path")
class StringKeyTests(unittest.TestCase): def setUp(self): self.trie = Trie() self.keys = [ 'bar', 'baz', 'barbell', 'foo', 'food', 'bar', 'bazbuzz', 'bazbuzz' ] for key in self.keys: self.trie.add(key, 1) def test_paths(self): paths = list(self.trie.paths()) self.assertTrue(len(paths) == 6, "Trie::paths") def test_has(self): for key in self.keys: self.assertTrue(self.trie.has(key), "Trie::has") def test_in(self): for key in self.keys: self.assertTrue(key in self.trie, "Trie::__contains__") def test_get(self): for key in self.keys: self.assertTrue(self.trie.get(key) is not None, "Trie::get") def test_getItem(self): for key in self.keys: self.assertTrue(self.trie[key] is not None, "Trie::__getitem__") def test_remove(self): self.trie.remove('bar', 1) self.trie.remove('baz', 1) self.assertTrue(self.trie.get('bar') == 1, "Trie::remove") self.assertTrue(self.trie.get('baz') is None, "Trie::remove") def test_removeAll(self): self.trie.removeAll('bar') self.assertTrue(self.trie.get('bar') is None, "Trie::removeAll") self.assertTrue( self.trie.get('barbell') is not None, "Trie::removeAll retain leaves") def test_setItem(self): self.trie['blah'] = 1 self.assertTrue(self.trie.get('blah') == 1, "Trie::__setitem__") def test_missingItems(self): notIn = ['bubbles', 'barb', 'bazz'] for key in notIn: self.assertTrue(self.trie.get(key) is None, "Missing items") def test_singleItems(self): for item in ['baz', 'barbell', 'foo', 'food']: self.assertTrue( self.trie.get(item) == 1, "Trie::add non-duplicates") def test_doubleItems(self): for item in ['bar', 'bazbuzz']: self.assertTrue( self.trie.get(item) == [1, 1], "Trie::add duplicates")