public void ConstructWithLetter() { var node = new TrieTree.Node('a'); Assert.AreEqual('a', node.Letter, "Letter"); Assert.IsFalse(node.IsEndOfWord, "IsEndOfWord"); }
public void LettersComparedCaseSensitively() { var node1 = new TrieTree.Node('.'); var node2 = node1.GetOrCreateDescendant('a'); var node3 = node1.GetOrCreateDescendant('A'); Assert.AreNotSame(node2, node3); }
public void AddDescendantLetter() { var node1 = new TrieTree.Node('a'); var node2 = node1.GetOrCreateDescendant('b'); Assert.IsNotNull(node2); Assert.AreNotSame(node1, node2); var node3 = node1.Children.GetOrCreateNode('b'); Assert.AreEqual(node2, node3); }
public void WalkIsDepthFirst() { var nodeA = new TrieTree.Node('a'); var nodeB = nodeA.Children.GetOrCreateNode('b'); var nodeC = nodeA.Children.GetOrCreateNode('c'); var nodeD = nodeC.Children.GetOrCreateNode('d'); var nodeE = nodeC.Children.GetOrCreateNode('e'); string walk = string.Empty; TrieTree.NodeWalk.Walk(nodeA, node => walk += node.Node.Letter); // DFS because typical tree is shallow & very wide Assert.AreEqual("acedb", walk); }
public void NodesCompareByLetterOnly() { var nodeA1 = new TrieTree.Node('a'); var nodeA2 = new TrieTree.Node('a'); var nodeB = new TrieTree.Node('b'); var nodeC = nodeA2.GetOrCreateDescendant('c'); nodeA1.IsEndOfWord = false; nodeA2.IsEndOfWord = true; Assert.AreEqual(0, nodeA1.CompareTo(nodeA2), "a == a'"); Assert.IsTrue(nodeA1.CompareTo(nodeB) < 0, "a < b"); Assert.IsTrue(nodeB.CompareTo(nodeA1) > 0, "b > a"); Assert.IsTrue(nodeB.CompareTo(nodeC) < 0, "b < c"); }