def test_search(): trie = Trie() try: assert(trie.search("word") == None) except TrieEmptyError as e: assert(e.message == "TrieEmptyError: 'search(): Trie is empty'") trie.add("word", "word #1") trie.add("words", "plural of words") trie.add("sword", "sword sheath excalibur") assert(len(trie) == 3) assert(trie.search("word") == "word #1") assert(trie.frequency("word") == 1) trie.add("word") assert(trie.search("word") == None) # overrridden by second 'add' assert(trie.frequency("word") == 2) trie.add("word", "words are found in a dictionary") assert(trie.search("word") == "words are found in a dictionary") # overrridden by third 'add' assert(trie.frequency("word") == 3) assert(trie.search("words") == "plural of words") assert(trie.search("sword") == "sword sheath excalibur") try: # prefixes dont have storage assert(trie.search("swo") == None) except KeyError as e: assert(e.message == "__getitem__(): Word 'swo' not found in trie")
def test_frequency(recursive=False): trie = Trie() assert (trie.frequency("word") == 0) trie.add("word") trie.add("word") trie.add_r("words") trie.add("words") trie.add("words") trie.add("words") trie.add("sword") frequency = trie.frequency if recursive: frequency = trie.frequency_r assert (len(trie) == 3) assert (frequency("word") == 2) assert (frequency("wor") == 0) assert (frequency("wort") == 0) assert (frequency("words") == 4) assert (frequency("sword") == 1) assert (frequency("swo") == 0) assert (frequency("so") == 0)
def test_frequency(): trie = Trie() try: assert(trie.frequency("word") == 0) except TrieEmptyError as e: assert(e.message == "TrieEmptyError: 'frequency(): Trie is empty'") trie.add("word") trie.add("word") trie.add("words") trie.add("words") trie.add("words") trie.add("words") trie.add("sword") assert(len(trie) == 3) assert(trie.frequency("word") == 2) assert(trie.frequency("wor") == 0) assert(trie.frequency("wort") == 0) assert(trie.frequency("words") == 4) assert(trie.frequency("sword") == 1) assert(trie.frequency("swo") == 0) assert(trie.frequency("so") == 0)
def test_remove(): trie = Trie() trie.add("abcd", "abcd") trie.add("abc", "testing") trie.add("abc", "testing abc") trie.add("abd", "Node abd") assert (trie.count("abc") == 2) assert (trie.count("a") == 3) assert (trie.frequency("abc") == 2) assert (len(trie) == 3) assert (trie.remove("") == None) assert (len(trie) == 3) assert (trie.remove("a") == None) assert (len(trie) == 3) assert (trie.hasWord("abc") == True) assert (trie.remove("abc", True) == "testing abc") # force remove assert (trie.hasWord("abc") == False) assert (len(trie) == 2) assert (trie.count("abc") == 1) assert (trie.count("a") == 2) # already removed, now it only exists as a prefix assert (trie.remove("abc") == None) assert (len(trie) == 2) assert (trie.hasWord("abd") == True) assert (trie.remove("abd") == "Node abd") assert (trie.hasWord("abd") == False) assert (len(trie) == 1) assert (trie.count("abc") == 1) assert (trie.count("a") == 1) assert (trie.hasWord("abcd") == True) assert (trie.remove("abcd") == "abcd") assert (len(trie) == 0) assert (trie.root is not None) trie.add("abcd") trie.add("abcd") trie.add("abcd") assert (trie.frequency("abcd") == 3) assert (len(trie) == 1) assert (trie.hasPrefix("abc") == True) assert (trie.hasWord("abcd") == True) assert (trie.count("abc") == 1) assert (trie.count("a") == 1) assert (trie.remove("abcd") == None) # soft remove, reduce frequency assert (len(trie) == 1) assert (trie.hasWord("abcd") == True) assert (trie.frequency("abcd") == 2) trie.add("abcd", "what") assert (trie.frequency("abcd") == 3) trie.add("abc") assert (len(trie) == 2) assert (trie.remove("abcd", True) == "what") # remove unconditionally assert (len(trie) == 1) assert (trie.hasWord("abc") == True) assert (trie.hasWord("abcd") == False) assert (trie.remove("abc") == None ) # soft remove, reduce frequency + delete because f:0 assert (len(trie) == 0) assert (trie.root is not None) trie.add("ab") trie.add("abcd") assert (len(trie) == 2) assert (trie.remove("abcd") == None) assert (len(trie) == 1) assert (trie.hasWord("ab") == True) assert (trie.hasWord("abcd") == False) assert (trie.hasPrefix("abc") == False)
def test_remove(): trie = Trie() trie.add("abcd", "abcd") trie.add("abc", "testing abc") trie.add("abc", "testing abc") trie.add("abd", "Node abd") assert(trie.countPrefix("abc") == 2) assert(trie.countPrefix("a") == 3) assert(trie.frequency("abc") == 2) assert(len(trie) == 3) assert(trie.remove("") == None) assert(len(trie) == 3) assert(trie.remove("a") == None) assert(len(trie) == 3) assert(trie.hasWord("abc") == True) assert(trie.remove("abc", True) == "testing abc") # force remove assert(trie.hasWord("abc") == False) assert(len(trie) == 2) assert(trie.countPrefix("abc") == 1) assert(trie.countPrefix("a") == 2) # already removed, now it only exists as a prefix assert(trie.remove("abc") == None) assert(len(trie) == 2) assert(trie.hasWord("abd") == True) assert(trie.remove("abd") == "Node abd") assert(trie.hasWord("abd") == False) assert(len(trie) == 1) assert(trie.countPrefix("abc") == 1) assert(trie.countPrefix("a") == 1) assert(trie.hasWord("abcd") == True) assert(trie.remove("abcd") == "abcd") assert(len(trie) == 0) assert(trie.root == None) trie.add("abcd") trie.add("abcd") trie.add("abcd") assert(trie.frequency("abcd") == 3) assert(len(trie) == 1) assert(trie.hasPrefix("abc") == True) assert(trie.hasWord("abcd") == True) assert(trie.countPrefix("abc") == 1) assert(trie.countPrefix("a") == 1) assert(trie.remove("abcd") == None) # soft remove, reduce frequency assert(len(trie) == 1) assert(trie.hasWord("abcd") == True) assert(trie.frequency("abcd") == 2) trie.add("abcd", "what") assert(trie.frequency("abcd") == 3) trie.add("abc") assert(len(trie) == 2) assert(trie.remove("abcd", True) == "what") # remove unconditionally assert(len(trie) == 1) assert(trie.hasWord("abc") == True) assert(trie.hasWord("abcd") == False) assert(trie.remove("abc") == None) # soft remove, reduce frequency + delete because f:0 assert(len(trie) == 0) assert(trie.root == None) trie.add("ab") trie.add("abcd") assert(len(trie) == 2) assert(trie.remove("abcd") == None) assert(len(trie) == 1) assert(trie.hasWord("ab") == True) assert(trie.hasWord("abcd") == False) assert(trie.hasPrefix("abc") == False) assert(trie.root['a'].children['b'].children.items == None)