Beispiel #1
0
        public void One_By_One_Grid()
        {
            var grid = new Grid(1, 1, new long[] {
                4
            });

            var adapter = new GridGraphProxiedAdapter(grid);
            var nodes   = adapter.GetGraph(0, 0, 0, 0);

            var result = TreeTraverser.BrutForceMaxPathDFS(nodes.startNode, nodes.endNode, 0);

            Assert.IsTrue(result.terminal);
            Assert.AreEqual(4, result.sum);
        }
Beispiel #2
0
        public void Four_By_Four_Grid()
        {
            var grid = new Grid(4, 4, new long[] {
                4, 8, 100, -1000,
                70, -10, 2000, 70,
                -5, -21, -6, 8,
                10000, -20, 15, 21
            });

            var adapter = new GridGraphProxiedAdapter(grid);
            var nodes   = adapter.GetGraph(0, 0, 3, 3);
            var result  = TreeTraverser.BrutForceMaxPathDFS(nodes.startNode, nodes.endNode, 0);

            Assert.IsTrue(result.terminal);
            Assert.AreEqual(result.sum, 12270);
        }
Beispiel #3
0
        public void Two_By_Two_Grid()
        {
            var grid = new Grid(2, 2, new long[] {
                4, -8,
                70, 10
            });
            var adapter = new GridGraphProxiedAdapter(grid);
            var nodes   = adapter.GetGraph(0, 0, 1, 1);
            var result  = TreeTraverser.BrutForceMaxPathDFS(nodes.startNode, nodes.endNode, 0);

            var adapter2 = new GridGraphProxiedAdapter(grid);
            var nodes2   = adapter2.GetGraph(0, 0, 1, 1);
            var result2  = TreeTraverser.OrderedMaxPath(nodes2.startNode, nodes2.endNode, adapter2.nodes);

            Assert.IsTrue(result.terminal);
            Assert.AreEqual(result2, result.sum);
        }
Beispiel #4
0
        public void Three_By_Three_Grid()
        {
            var grid = new Grid(3, 3, new long[] {
                4, 8, 100,
                70, -10, 2000,
                -5, -21, -6
            });

            var adapter = new GridGraphProxiedAdapter(grid);
            var nodes   = adapter.GetGraph(0, 0, 2, 2);
            var result  = TreeTraverser.BrutForceMaxPathDFS(nodes.startNode, nodes.endNode, 0);


            var adapter2 = new GridGraphProxiedAdapter(grid);
            var nodes2   = adapter2.GetGraph(0, 0, 2, 2);
            var result2  = TreeTraverser.OrderedMaxPath(nodes2.startNode, nodes2.endNode, adapter2.nodes);

            Assert.IsTrue(result.terminal);
            Assert.AreEqual(result.sum, result2);
        }
Beispiel #5
0
        public void Eight_By_Eight_Grid()
        {
            var grid = new Grid(8, 8, new long[] {
                4, 8, 100, -1000, 4, 8, 100, -1000,
                70, -10, 2000, 70, 70, -10, 2000, 70,
                -5, -21, -6, 8, -5, -21, -6, 8,
                10000, -20, 15, 21, 10000, -20, 15, 21,
                4, 8, 100, -1000, 4, 8, 100, -1000,
                70, -10, 2000, 70, 70, -10, 2000, 70,
                -5, -21, -6, 8, -5, -21, -6, 8,
                10000, -20, 15, 21, 10000, -20, 15, 21
            });

            var adapter = new GridGraphProxiedAdapter(grid);
            var nodes   = adapter.GetGraph(0, 0, 7, 7);

            var result = TreeTraverser.OrderedMaxPath(nodes.startNode, nodes.endNode, adapter.nodes);

            Assert.AreEqual(47799, result);
        }
Beispiel #6
0
        public void Setup()
        {
            /*
             *        root
             *       /  | \
             *     a    b  c
             *    /|\      |
             *   / | \     |
             * aa ab  ac  ca
             *    /|\      |\
             *   / | \     | \
             * aba abb abc caa cab
             * */
            root = new TestTreePart("root");
            var a = new TestTreePart(root, "a");

            b = new TestTreePart(root, "b");
            var c = new TestTreePart(root, "c");

            var a_a = new DerivedTreePart(a, "a.a");
            var a_b = new TestTreePart(a, "a.b");

            a_c = new DerivedTreePart(a, "a.c");

            a_b_a = new DerivedTreePart(a_b, "a.b.a");
            a_b_b = new TestTreePart(a_b, "a.b.b");
            a_b_c = new TestTreePart(a_b, "a.b.c");

            var c_a = new TestTreePart(c, "c.a");

            c_a_a = new TestTreePart(c_a, "c.a.a");
            end   = new TestTreePart(c_a, "c.a.b");

            m_tree = new TreeTraverser <TestTreePart>(root);

            Logger.Enable();
            Logger.SetFlushAfterEachLog(true);
        }
        public void WhenTraversingLoopingTree_WithCycleHandlingTruncate_FindsCorrectPaths()
        {
            NTreeNode tree = GenerateTreeWithCycle();

            IEnumerable <IEnumerable <string> > paths = TreeTraverser
                                                        .GetTraversalPaths(tree, node => node.Children, CyclicGraphBehaviour.Truncate)
                                                        .Select(path => path.Select(node => node.Label).ToArray())
                                                        .ToArray();

            string[][] expected = new[]
            {
                new[] { "A", "B", "D", "H" },
                new[] { "A", "B", "D", "I" },
                new[] { "A", "B", "E", "J" },
                new[] { "A", "C", "F", "L" },
                new[] { "A", "C", "F", "M" },
                new[] { "A", "C", "G", "N" },
                new[] { "A", "C", "G", "O" },
                new[] { "A", "B", "E", "K", "B" }
            };

            Assert.Equal(expected, paths);
        }
        public void WhenTraversingSimpleTree_FindsCorrectPaths()
        {
            NTreeNode tree = GenerateTree();

            IEnumerable <IEnumerable <string> > paths = TreeTraverser
                                                        .GetTraversalPaths(tree, node => node.Children)
                                                        .Select(path => path.Select(node => node.Label).ToArray())
                                                        .ToArray();

            string[][] expected = new[]
            {
                new[] { "A", "B", "D", "H" },
                new[] { "A", "B", "D", "I" },
                new[] { "A", "B", "E", "J" },
                new[] { "A", "B", "E", "K" },
                new[] { "A", "C", "F", "L" },
                new[] { "A", "C", "F", "M" },
                new[] { "A", "C", "G", "N" },
                new[] { "A", "C", "G", "O" },
            };

            Assert.Equal(expected, paths);
        }
Beispiel #9
0
        public void Task04_LeavesFirstTraversal()
        {
            Node tree1Root = BuildTree(input1);

            Assert.AreEqual("2 4 8 3 6 4 9 5", TreeTraverser.Traverse4_LeavesFirst(tree1Root));
        }
Beispiel #10
0
        public void Task03_RootFirstTraversal()
        {
            Node tree1Root = BuildTree(input1);

            Assert.AreEqual("5 4 9 3 6 2 4 8", TreeTraverser.Traverse3_RootFirst(tree1Root));
        }
Beispiel #11
0
        public void Task02_DescendingOrderTraversal()
        {
            Node tree1Root = BuildTree(input1);

            Assert.AreEqual("9 8 6 5 4 4 3 2", TreeTraverser.Traverse2_DescendingOrder(tree1Root));
        }
Beispiel #12
0
        public void Task01_AscendingOrderTraversal()
        {
            Node tree1Root = BuildTree(input1);

            Assert.AreEqual("2 3 4 4 5 6 8 9", TreeTraverser.Traverse1_AscendingOrder(tree1Root));
        }
        public void WhenTraversingLoopingTree_WithCycleHandlingThrow_ThrowsCyclicGraphException()
        {
            NTreeNode tree = GenerateTreeWithCycle();

            Assert.Throws <CyclicGraphException>(() => TreeTraverser.GetTraversalPaths(tree, node => node.Children, CyclicGraphBehaviour.Throw).ToList());
        }