Ejemplo n.º 1
0
        public void TreeTraversal_ArbitraryStartPoint_IncludeSelfOffWorks()
        {
            /*
             *
             *      root
             *       /|\
             *      / | \
             *     a  b  c
             *    /|\     \
             *   / | \     \
             * aa  ab  ac    ca
             *    /|\       | \
             *   / | \      |  \
             * aba abb abc  caa cab
             *
             * */

            var arbitraryStartPointIter = TreeTraversal <TestTreePart> .IteratorAt(root, new TreeNodePath(0, 1));

            Assert.AreEqual("a.b", arbitraryStartPointIter.Node.Value);
            var found = TreeTraversal <TestTreePart> .All(arbitraryStartPointIter.Node, arbitraryStartPointIter.Node, includeSelf : false).FirstOrDefault();

            Assert.AreEqual("a.b.a", found.Value);

            var iterEnd = TreeTraversal <TestTreePart> .IteratorAt(root, new TreeNodePath(0, 1, 0));

            Assert.AreEqual("a.b.a", iterEnd.Node.Value);

            Assert.AreEqual(found, iterEnd.Node);
        }
Ejemplo n.º 2
0
        public void TreeTraversal_ArbitraryStartPoint_DFS_Works()
        {
            /*
             *
             *      root
             *       /|\
             *      / | \
             *     a  b  c
             *    /|\     \
             *   / | \     \
             * aa  ab  ac    ca
             *    /|\       | \
             *   / | \      |  \
             * aba abb abc  caa cab
             *
             * */
            TreeNodePath pathTo_abc = new TreeNodePath(0, 1, 2);
            var          iter       = TreeTraversal <TestTreePart> .IteratorAt(root, pathTo_abc, strategy : eTraversalStrategy.DepthFirst, depthLimits : new LevelRestriction {
                AllowsExitingStartDepth = true
            });

            Assert.AreNotEqual(TreeIter <TestTreePart> .End, iter);
            ++iter;
            Assert.AreNotEqual(TreeIter <TestTreePart> .End, iter);
            Assert.AreEqual(a_c, iter.Node);
        }
Ejemplo n.º 3
0
        public void TreeTraversal_IteratorAccessor_IterateFrom_Works()
        {
            // At 0,0 we got to a->a_a, a_b_c is a child of a_b, which is a sibling to a_a - this is the hardest test of if this works or not
            TreeIter <TestTreePart> iter = TreeTraversal <TestTreePart> .IteratorAt(root, new TreeNodePath(0, 0), node => node == a_b_c);

            Assert.AreSame(a_b_c, iter.Node);
        }
Ejemplo n.º 4
0
        public void TreeTraversal_ArbitraryStartPoint_BFS_Works()
        {
            /*
             *
             *       root
             *       /|\
             *      / | \
             *     a  b  c
             *    /|\     \
             *   / | \     \
             * aa  ab  ac    ca
             *    /|\       | \
             *   / | \      |  \
             * aba abb abc  caa cab
             *
             * */
            var pathTo_abb = new TreeNodePath(0, 1, 1);
            var iter       = TreeTraversal <TestTreePart> .IteratorAt(root, pathTo_abb, strategy : eTraversalStrategy.BreadthFirst);

            Assert.AreNotEqual(TreeIter <TestTreePart> .End, iter);
            ++iter;
            Assert.AreNotEqual(TreeIter <TestTreePart> .End, iter);
            Assert.AreEqual(a_b_c, iter.Node);
        }
Ejemplo n.º 5
0
 public void TreeTraversal_IteratorAccessor_IteratorAt_OutOfBoundsReturnsEnd()
 {
     Assert.AreSame(TreeIter <TestTreePart> .End, TreeTraversal <TestTreePart> .IteratorAt(root, new TreeNodePath(550, 1, 2)));
 }