blob: 3d18debcde513aa972114cb20ac06b848ac9fbaa [file] [log] [blame]
(async function() {
var trie;
TestRunner.addResult(`Verify "trie" functionality.`);
TestRunner.runTests([
function testAddWord()
{
var trie = new Common.Trie();
addWord(trie, "hello");
hasWord(trie, "he");
hasWord(trie, "hello");
hasWord(trie, "helloo");
},
function testAddWords()
{
var trie = new Common.Trie();
addWord(trie, "foo");
addWord(trie, "bar");
addWord(trie, "bazz");
hasWord(trie, "f");
hasWord(trie, "ba");
hasWord(trie, "baz");
hasWord(trie, "bar");
hasWord(trie, "bazz");
},
function testRemoveWord()
{
var trie = new Common.Trie();
addWord(trie, "foo");
removeWord(trie, "f");
removeWord(trie, "fo");
removeWord(trie, "fooo");
hasWord(trie, "foo");
removeWord(trie, "foo");
hasWord(trie, "foo");
},
function testAddAfterRemove()
{
var trie = new Common.Trie();
addWord(trie, "foo");
removeWord(trie, "foo");
addWord(trie, "bar");
hasWord(trie, "foo");
hasWord(trie, "bar");
},
function testWordOverwrite()
{
var trie = new Common.Trie();
addWord(trie, "foo");
addWord(trie, "foo");
removeWord(trie, "foo");
hasWord(trie, "foo");
},
function testRemoveNonExisting()
{
var trie = new Common.Trie();
addWord(trie, "foo");
removeWord(trie, "bar");
removeWord(trie, "baz");
hasWord(trie, "foo");
},
function testEmptyWord()
{
var trie = new Common.Trie();
addWord(trie, "");
hasWord(trie, "");
removeWord(trie, "");
hasWord(trie, "");
},
function testAllWords()
{
var trie = new Common.Trie();
addWord(trie, "foo");
addWord(trie, "bar");
addWord(trie, "bazzz");
words(trie);
words(trie, "f");
words(trie, "g");
words(trie, "b");
words(trie, "ba");
words(trie, "bar");
words(trie, "barz");
words(trie, "baz");
},
function testOneCharWords()
{
var trie = new Common.Trie();
addWord(trie, "a");
addWord(trie, "b");
addWord(trie, "c");
words(trie);
},
function testChainWords()
{
var trie = new Common.Trie();
addWord(trie, "f");
addWord(trie, "fo");
addWord(trie, "foo");
addWord(trie, "foo");
words(trie);
},
function testClearTrie()
{
var trie = new Common.Trie();
addWord(trie, "foo");
addWord(trie, "bar");
words(trie);
clear(trie);
words(trie);
},
function testLongestPrefix()
{
var trie = new Common.Trie();
addWord(trie, "fo");
addWord(trie, "food");
longestPrefix(trie, "fear", false);
longestPrefix(trie, "fear", true);
longestPrefix(trie, "football", false);
longestPrefix(trie, "football", true);
longestPrefix(trie, "bar", false);
longestPrefix(trie, "bar", true);
longestPrefix(trie, "foo", false);
longestPrefix(trie, "foo", true);
},
]);
function hasWord(trie, word)
{
TestRunner.addResult(`trie.has("${word}") = ${trie.has(word)}`);
}
function addWord(trie, word)
{
TestRunner.addResult(`trie.add("${word}")`);
trie.add(word);
}
function removeWord(trie, word)
{
TestRunner.addResult(`trie.remove("${word}") = ${trie.remove(word)}`);
}
function words(trie, prefix)
{
var title = prefix ? `trie.words("${prefix}")` : `trie.words()`;
var words = trie.words(prefix);
var text = words.length ? `[\n ${words.join(",\n ")}\n]` : "[]";
TestRunner.addResult(title + " = " + text);
}
function clear(trie)
{
trie.clear();
TestRunner.addResult("trie.clear()");
}
function longestPrefix(trie, word, fullWordOnly)
{
TestRunner.addResult(`trie.longestPrefix("${word}", ${fullWordOnly}) = "${trie.longestPrefix(word, fullWordOnly)}"`);
}
})();