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")
Beispiel #2
0
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)
Beispiel #4
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)