@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_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_depthFirstPostOrder_cycle() { Traverser<Character> traverser = Traverser.forGraph(CYCLE_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_depthFirstPostOrder_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.depthFirstPostOrder('h'), "abcdefgh"); assertEqualCharNodes(traverser.depthFirstPostOrder('d'), "abcd"); assertEqualCharNodes(traverser.depthFirstPostOrder('a'), "a"); }
@Test public void forGraph_depthFirstPostOrderIterable_diamond() { Traverser<Character> traverser = Traverser.forGraph(DIAMOND_GRAPH); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("")), ""); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("bc")), "dbc"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("a")), "dbca"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("acdb")), "dbca"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("db")), "db"); }
@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"); }
@Test public void forTree_depthFirstPostOrderIterable_cyclicGraphContainingTree() throws Exception { Traverser<Character> traverser = Traverser.forTree(CYCLIC_GRAPH_CONTAINING_TREE); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("a")), "cdba"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("b")), "cdb"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("cd")), "cd"); }
@Test public void forGraph_depthFirstPostOrder_twoTrees() { Iterable<Character> result = Traverser.forGraph(TWO_TREES).depthFirstPostOrder('a'); assertEqualCharNodes(result, "ba"); }
@Test public void forTree_depthFirstPostOrder_twoTrees() { Iterable<Character> result = Traverser.forTree(TWO_TREES).depthFirstPostOrder('a'); assertEqualCharNodes(result, "ba"); }
@Test public void forTree_depthFirstPostOrder_singleRoot() { Iterable<Character> result = Traverser.forTree(SINGLE_ROOT).depthFirstPostOrder('a'); assertEqualCharNodes(result, "a"); }
@Test public void forTree_depthFirstPostOrderIterable_twoTrees() { assertEqualCharNodes(Traverser.forTree(TWO_TREES).depthFirstPostOrder(charactersOf("a")), "ba"); assertEqualCharNodes( Traverser.forTree(TWO_TREES).depthFirstPostOrder(charactersOf("ca")), "dcba"); }
@Test public void forTree_depthFirstPostOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forTree(SINGLE_ROOT).depthFirstPostOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forGraph_depthFirstPostOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forGraph(SINGLE_ROOT).depthFirstPostOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forTree_depthFirstPostOrder_emptyGraph() { try { Traverser.forTree(createDirectedGraph()).depthFirstPostOrder('a'); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@Test public void forGraph_depthFirstPostOrder_javadocExample_canBeIteratedMultipleTimes() { Iterable<Character> result = Traverser.forGraph(JAVADOC_GRAPH).depthFirstPostOrder('a'); assertEqualCharNodes(result, "fcebda"); assertEqualCharNodes(result, "fcebda"); }
@Test public void forGraph_depthFirstPostOrder_emptyGraph() { try { Traverser.forGraph(createDirectedGraph()).depthFirstPostOrder('a'); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@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_depthFirstPostOrder_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(DIAMOND_GRAPH); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPostOrder('a'); assertEqualCharNodes(Iterables.limit(result, 2), "db"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'b', 'd'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "db"); 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'); }