@@ -184,6 +184,13 @@ public void forGraph_breadthFirstIterable_javadocExample_canBeIteratedMultipleTi
184184 assertEqualCharNodes (result , "bfaecd" );
185185 }
186186
187+ @ Test
188+ public void forGraph_breadthFirst_infinite () {
189+ Iterable <Integer > result =
190+ Traverser .forGraph (fixedSuccessors (Iterables .cycle (1 , 2 , 3 ))).breadthFirst (0 );
191+ assertThat (Iterables .limit (result , 4 )).containsExactly (0 , 1 , 2 , 3 ).inOrder ();
192+ }
193+
187194 @ Test
188195 public void forGraph_breadthFirst_diamond () {
189196 Traverser <Character > traverser = Traverser .forGraph (DIAMOND_GRAPH );
@@ -373,6 +380,13 @@ public void forGraph_depthFirstPreOrderIterable_javadocExample_canBeIteratedMult
373380 assertEqualCharNodes (result , "bacefd" );
374381 }
375382
383+ @ Test
384+ public void forGraph_depthFirstPreOrder_infinite () {
385+ Iterable <Integer > result =
386+ Traverser .forGraph (fixedSuccessors (Iterables .cycle (1 , 2 , 3 ))).breadthFirst (0 );
387+ assertThat (Iterables .limit (result , 2 )).containsExactly (0 , 1 ).inOrder ();
388+ }
389+
376390 @ Test
377391 public void forGraph_depthFirstPreOrder_diamond () {
378392 Traverser <Character > traverser = Traverser .forGraph (DIAMOND_GRAPH );
@@ -784,6 +798,13 @@ public void forTree_withUndirectedNetwork_throws() throws Exception {
784798 }
785799 }
786800
801+ @ Test
802+ public void forTree_breadthFirst_infinite () {
803+ Iterable <Integer > result =
804+ Traverser .forTree (fixedSuccessors (Iterables .cycle (1 , 2 , 3 ))).breadthFirst (0 );
805+ assertThat (Iterables .limit (result , 8 )).containsExactly (0 , 1 , 2 , 3 , 1 , 2 , 3 , 1 ).inOrder ();
806+ }
807+
787808 @ Test
788809 public void forTree_breadthFirst_tree () throws Exception {
789810 Traverser <Character > traverser = Traverser .forTree (TREE );
@@ -912,6 +933,13 @@ public void forTree_breadthFirstIterable_iterableIsLazy() {
912933 assertThat (graph .requestedNodes ).containsExactly ('a' , 'a' , 'd' , 'd' , 'd' , 'g' , 'g' , 'g' );
913934 }
914935
936+ @ Test
937+ public void forTree_depthFirstPreOrder_infinite () {
938+ Iterable <Integer > result =
939+ Traverser .forTree (fixedSuccessors (Iterables .cycle (1 , 2 , 3 ))).depthFirstPreOrder (0 );
940+ assertThat (Iterables .limit (result , 3 )).containsExactly (0 , 1 , 1 ).inOrder ();
941+ }
942+
915943 @ Test
916944 public void forTree_depthFirstPreOrderIterable_tree () throws Exception {
917945 Traverser <Character > traverser = Traverser .forTree (TREE );
@@ -1238,4 +1266,13 @@ public Iterable<? extends Character> successors(Character node) {
12381266 return delegate .successors (node );
12391267 }
12401268 }
1269+
1270+ private static <N > SuccessorsFunction <N > fixedSuccessors (final Iterable <N > successors ) {
1271+ return new SuccessorsFunction <N >() {
1272+ @ Override
1273+ public Iterable <N > successors (N n ) {
1274+ return successors ;
1275+ }
1276+ };
1277+ }
12411278}
0 commit comments