Ejemplo n.º 1
0
def test_countPrefix():
	t = Trie()
	t.add("abcd")
	assert(len(t) == 1)
	assert(t.countPrefix("abc") == 1)

	trie = Trie()
	try:
		assert(trie.countPrefix("word") == 0)
	except TrieEmptyError as e:
		assert(e.message == "TrieEmptyError: 'countPrefix(): Trie is empty'")

	trie.add("word")
	trie.add("word")
	trie.add("words")
	trie.add("words")
	trie.add("words")
	trie.add("words")
	trie.add("sword")
	trie.add("ward")

	assert(len(trie) == 4)
	assert(trie.countPrefix("w") == 3)
	assert(trie.countPrefix("word") == 2)
	assert(trie.countPrefix("wor") == 2)
	assert(trie.countPrefix("wort") == 0)
	assert(trie.countPrefix("words") == 1)
	assert(trie.countPrefix("sword") == 1)
	assert(trie.countPrefix("swo") == 1)
	assert(trie.countPrefix("so") == 0)
Ejemplo n.º 2
0
def test_removePrefix():
	trie = Trie()
	trie.add("abcd")
	trie.add("abc")
	trie.add("abd")
	trie.add("abce")
	trie.add("words")
	trie.add("swords")

	assert(trie.countPrefix("abc") == 3)
	assert(trie.countPrefix("a") == 4)

	assert(len(trie) == 6)
	trie.removePrefix("abc")  # removes 'abc', 'abcd' and 'abce'

	# 'ab' should only have 'd' as its child now
	assert(len(trie) == 3)
	assert(trie.root['a'].children['b'].children.items.keys() == ['d'])
	assert(trie.countPrefix("abc") == 0)
	assert(trie.countPrefix("a") == 1)
	assert(trie.findKeysMatchingPrefix("a") == ["abd"])

	# try and remove 'abc' again - nothing should change
	trie.removePrefix("abc")  # removes 'abc', 'abcd' and 'abce'
	assert(len(trie) == 3)
	assert(trie.root['a'].children['b'].children.items.keys() == ['d'])
	assert(trie.countPrefix("abc") == 0)
	assert(trie.countPrefix("a") == 1)
	assert(trie.findKeysMatchingPrefix("a") == ["abd"])

	# remove 'a*'
	trie.removePrefix("a")  # removes 'abd'
	assert(len(trie) == 2)
	assert(sorted(trie.root.items.keys()) == ['s', 'w'])
	assert(trie.countPrefix("abc") == 0)
	assert(trie.countPrefix("a") == 0)
	assert(trie.findKeysMatchingPrefix("a") == [])
	assert(trie.findKeysMatchingPrefix("") == ["swords", "words"])

	# flush the whole trie
	trie.removePrefix("")
	assert(trie.root == None)
	assert(len(trie) == 0)
Ejemplo n.º 3
0
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)