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 KeyAsValueTests(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, key) def test_values(self): for k in self.keys: self.assertTrue(self.trie.get(k) == k, "Trie::get")
class SubPathCountTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction=KEY_DOTTED, storeFunction=STORE_COUNT) self.keys = [ 'com.example', 'com.blah', 'com.example.sub1', 'com.example.sub2' ] for key in self.keys: self.trie.add(key, 1, atAllSubPaths=True) def test_paths(self): for k in self.keys: self.assertTrue(k in self.trie, "Trie::paths has with atAllSubPaths") def test_counts(self): countParts = { 'com': 4, 'com.example': 3, 'com.blah': 1, 'com.example.sub1': 1, 'com.example.sub2': 1 } for countPart in countParts.items(): val = self.trie.get(countPart[0]) self.assertTrue(val == countPart[1], "Trie::get with atAllSubPaths") def test_removes(self): self.trie.remove('com.example.sub2', atAllSubPaths=True) countParts = { 'com': 3, 'com.example': 2, 'com.blah': 1, 'com.example.sub1': 1 } for countPart in countParts.items(): val = self.trie.get(countPart[0]) self.assertTrue(val == countPart[1], "Trie::remove with atAllSubPaths")
class KeyAsValueTests(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, key) def test_values(self): for k in self.keys: self.assertTrue(self.trie.get(k) == k, "Trie::get")
class SubPathCountTests(unittest.TestCase): def setUp(self): self.trie = Trie(keyFunction = KEY_DOTTED, storeFunction = STORE_COUNT) self.keys = ['com.example', 'com.blah', 'com.example.sub1', 'com.example.sub2'] for key in self.keys: self.trie.add(key, 1, atAllSubPaths = True) def test_paths(self): for k in self.keys: self.assertTrue(k in self.trie, "Trie::paths has with atAllSubPaths") def test_counts(self): countParts = { 'com': 4, 'com.example': 3, 'com.blah': 1, 'com.example.sub1': 1, 'com.example.sub2': 1 } for countPart in countParts.items(): val = self.trie.get(countPart[0]) self.assertTrue(val == countPart[1], "Trie::get with atAllSubPaths") def test_removes(self): self.trie.remove('com.example.sub2', atAllSubPaths = True) countParts = { 'com': 3, 'com.example': 2, 'com.blah': 1, 'com.example.sub1': 1 } for countPart in countParts.items(): val = self.trie.get(countPart[0]) self.assertTrue(val == countPart[1], "Trie::remove with atAllSubPaths")
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")
print "\tBuilt Trie of %i words in %s (%0.2f words / second)" % ( len(t), str(timedelta(seconds=ed - st)), (len(t) * 1.0) / (ed - st)) print "Prefix graph:\n" # the prefix graph is just a simple double loop to find each prefix combination prefixes = "abcdefghijklmnopqrstuvwxyz" st = time.time() print " %s" % (prefixes) print " +" + "-" * 26 + "+" for rowPrefix in prefixes: rowData = [rowPrefix, "|"] for colPrefix in prefixes: if t.get(rowPrefix + colPrefix, defaultValue=0) > 0: rowData.append('+') else: rowData.append(" ") rowData += ['|', rowPrefix] print "".join(rowData) print " +" + "-" * 26 + "+" print " %s" % (prefixes) ed = time.time() print "\nPrefix graph took %s" % (str(timedelta(seconds=ed - st)))
dictfile.close() print "\tBuilt Trie of %i words in %s (%0.2f words / second)" % (len(t), str(timedelta(seconds = ed - st)), (len(t) * 1.0) / (ed - st)) print "Prefix graph:\n" # the prefix graph is just a simple double loop to find each prefix combination prefixes = "abcdefghijklmnopqrstuvwxyz" st = time.time() print " %s" % (prefixes) print " +" + "-" * 26 + "+" for rowPrefix in prefixes: rowData = [rowPrefix, "|"] for colPrefix in prefixes: if t.get(rowPrefix + colPrefix, defaultValue = 0) > 0: rowData.append('+') else: rowData.append(" ") rowData += ['|', rowPrefix] print "".join(rowData) print " +" + "-" * 26 + "+" print " %s" % (prefixes) ed = time.time() print "\nPrefix graph took %s" % (str(timedelta(seconds = ed - st)))
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")