Exemplo n.º 1
0
        public void VisitBreadthFirst_ShouldWalkInCorrectOrder()
        {
            var visitedOrder = new List <string>();
            var forestNodes  = CreateForestNodes();
            var target       = new ForestVisitor <TestNode>(node => forestNodes.Where(n => n.ParentId == node.Id));

            target.VisitBreadthFirst(
                // Start from root nodes.
                startNodes: forestNodes.Where(node => node.ParentId == null),
                // As we visit them, add their ids to the result list.
                action: visitedNode => visitedOrder.Add(visitedNode.Id));
            visitedOrder.Should().Equal(new List <string>
            {
                "1", "2", "11", "12", "21", "22", "111", "112", "113",
            });
        }
Exemplo n.º 2
0
        public void VisitBottomUp_ShouldWalkInCorrectOrder()
        {
            var visitedOrder = new List <string>();
            var forestNodes  = CreateForestNodes();
            var target       = new ForestVisitor <TestNode>(node => forestNodes.Where(n => n.ParentId == node.Id));

            target.VisitBottomUp(
                // Start from root nodes.
                startNodes: forestNodes.Where(node => node.ParentId == null),
                // As we visit them, add their ids to the result list.
                action: visitedNode => visitedOrder.Add(visitedNode.Id));

            Assert.IsTrue(visitedOrder.IndexOf("1") > visitedOrder.IndexOf("2"));
            Assert.IsTrue(visitedOrder.IndexOf("1") > visitedOrder.IndexOf("11"));
            Assert.IsTrue(visitedOrder.IndexOf("11") > visitedOrder.IndexOf("111"));
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            IForestVisitor <TextNode> visitor = new ForestVisitor <TextNode>(node =>
                                                                             _nodes.Where(n => n.ParentId == node.Id)
                                                                             );

            var rootNodes = _nodes.Where(node => node.ParentId == null);

            Console.WriteLine("Visiting nodes depth first...");
            visitor.VisitDepthFirst(
                rootNodes,
                node => Console.WriteLine(node.Id));

            Console.WriteLine("... breadth first ...");
            visitor.VisitBreadthFirst(
                rootNodes,
                node => Console.WriteLine(node.Id));

            Console.WriteLine("... and bottom up.");
            visitor.VisitBottomUp(
                rootNodes,
                node => Console.WriteLine(node.Id));
        }