@Test public void forGraph_depthFirstPostOrder_twoTrees() { Iterable<Character> result = Traverser.forGraph(TWO_TREES).depthFirstPostOrder('a'); assertEqualCharNodes(result, "ba"); }
@Test public void forGraph_depthFirstPreOrder_twoTrees() { Iterable<Character> result = Traverser.forGraph(TWO_TREES).depthFirstPreOrder('a'); assertEqualCharNodes(result, "ab"); }
@Test public void forGraph_breadthFirst_javadocExample_canBeIteratedMultipleTimes() { Iterable<Character> result = Traverser.forGraph(JAVADOC_GRAPH).breadthFirst('a'); assertEqualCharNodes(result, "abcdef"); assertEqualCharNodes(result, "abcdef"); }
@Test public void forGraph_depthFirstPostOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forGraph(SINGLE_ROOT).depthFirstPostOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forGraph_depthFirstPostOrderIterable_emptyGraph() { assertEqualCharNodes( Traverser.forGraph(createDirectedGraph()).depthFirstPostOrder(charactersOf("")), ""); try { Traverser.forGraph(createDirectedGraph()).depthFirstPostOrder(charactersOf("a")); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@Test public void forGraph_depthFirstPreOrder_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(DIAMOND_GRAPH); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPreOrder('a'); assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'b', 'd'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'a', 'b', 'b', 'd', 'd'); }
@Test public void forTree_depthFirstPostOrderIterable_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(TREE); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPostOrder(charactersOf("dg")); assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'b', 'd', 'd', 'g'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'b', 'b', 'd', 'd', 'd', 'g'); }
@Test public void forGraph_breadthFirst_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.breadthFirst('h'), "hdegabcf"); assertEqualCharNodes(traverser.breadthFirst('d'), "dabc"); assertEqualCharNodes(traverser.breadthFirst('a'), "a"); }
@Test public void forGraph_depthFirstPreOrder_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.depthFirstPreOrder('h'), "hdabcegf"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "dabc"); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "a"); }
@Test public void forGraph_depthFirstPostOrder_multigraph() { Traverser<Character> traverser = Traverser.forGraph(MULTI_GRAPH); assertEqualCharNodes(traverser.depthFirstPostOrder('a'), "dbca"); assertEqualCharNodes(traverser.depthFirstPostOrder('b'), "db"); assertEqualCharNodes(traverser.depthFirstPostOrder('c'), "dbac"); assertEqualCharNodes(traverser.depthFirstPostOrder('d'), "d"); }
@Test public void forGraph_depthFirstPreOrder_diamond() { Traverser<Character> traverser = Traverser.forGraph(DIAMOND_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "abdc"); assertEqualCharNodes(traverser.depthFirstPreOrder('b'), "bd"); assertEqualCharNodes(traverser.depthFirstPreOrder('c'), "cd"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "d"); }
@Test public void forGraph_depthFirstPostOrder_diamond() { Traverser<Character> traverser = Traverser.forGraph(DIAMOND_GRAPH); assertEqualCharNodes(traverser.depthFirstPostOrder('a'), "dbca"); assertEqualCharNodes(traverser.depthFirstPostOrder('b'), "db"); assertEqualCharNodes(traverser.depthFirstPostOrder('c'), "dc"); assertEqualCharNodes(traverser.depthFirstPostOrder('d'), "d"); }
@Test public void forGraph_depthFirstPostOrder_twoCycles() { Traverser<Character> traverser = Traverser.forGraph(TWO_CYCLES_GRAPH); assertEqualCharNodes(traverser.depthFirstPostOrder('a'), "dcba"); assertEqualCharNodes(traverser.depthFirstPostOrder('b'), "adcb"); assertEqualCharNodes(traverser.depthFirstPostOrder('c'), "badc"); assertEqualCharNodes(traverser.depthFirstPostOrder('d'), "cbad"); }
@Test public void forGraph_depthFirstPreOrderIterable_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("hg")), "hdabcegf"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("gd")), "gfdabc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("bdgh")), "bdacgfhe"); }
@Test public void forGraph_breadthFirstIterable_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.breadthFirst(charactersOf("hg")), "hgdefabc"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("gd")), "gdfabc"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("bdgh")), "bdghacfe"); }
@Test public void forGraph_breadthFirstIterable_twoCycles() { Traverser<Character> traverser = Traverser.forGraph(TWO_CYCLES_GRAPH); assertEqualCharNodes(traverser.breadthFirst(charactersOf("a")), "abcd"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("bd")), "bdca"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("dc")), "dcab"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("bc")), "bcda"); }
@Test public void forGraph_depthFirstPreOrderIterable_multigraph() { Traverser<Character> traverser = Traverser.forGraph(MULTI_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("ac")), "abdc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("cb")), "cabd"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("db")), "db"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("d")), "d"); }
@Test public void forGraph_depthFirstPostOrderIterable_multigraph() { Traverser<Character> traverser = Traverser.forGraph(MULTI_GRAPH); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("ac")), "dbca"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("cb")), "dbac"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("db")), "db"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("d")), "d"); }