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); }
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); }
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); }
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); }
public void TreeTraversal_IteratorAccessor_IteratorAt_OutOfBoundsReturnsEnd() { Assert.AreSame(TreeIter <TestTreePart> .End, TreeTraversal <TestTreePart> .IteratorAt(root, new TreeNodePath(550, 1, 2))); }