Skip to content

Commit 32f2d77

Browse files
fluentfuturenetdpb
authored andcommitted
Make breadth-first iterators consume the successor iterators lazily, and refactor to cut about 150 lines of code.
RELNOTES=Lazier Traverser#breadthFirst(). ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=321062203
1 parent ea4e950 commit 32f2d77

File tree

4 files changed

+284
-490
lines changed

4 files changed

+284
-490
lines changed

android/guava-tests/test/com/google/common/graph/TraverserTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)