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");
        }