### Question:
FlowGraph { public FlowGraph<V> getTransverseGraph() { if(this.transverseGraph == null) { this.transverseGraph = new FlowGraph<>(this); } return this.transverseGraph; } FlowGraph(Map<V, Set<V>> edges, V entryPoint, V exitPoint); private  FlowGraph(FlowGraph<V> originalGraph); V getEntryPoint(); V getExitPoint(); Map<V, Set<V>> getSuccessors(); Map<V, Set<V>> getPredecessors(); Set<V> getVertices(); Set<V> getSuccessors(V vertex); Set<V> getPredecessors(V vertex); FlowGraph<V> getTransverseGraph(); Map<V, V> getImmediateDominators(); Map<V, Set<V>> getDominatorTree(); Map<V, Set<V>> getDominatorSets(); Map<V, Set<V>> getDominanceFrontiers(); Map<V, V> getImmediatePostDominators(); Map<V, Set<V>> getPostDominatorSets(); Map<V, Set<V>> getPostDominanceFrontiers(); Set<NaturalLoop<V>> getNaturalLoops(); boolean containsPath(V source, V target); @Override boolean equals(Object o); @Override int hashCode(); void write(Writer writer, String graphName, Comparator<V> vertexComparator,
                      Function<V, String> printer, int fontSize);  }### Answer:
@Test public void testGetTransverseGraphEmptyGraph() { FlowGraph<Integer> expected = new FlowGraphBuilder<Integer>() .addEntryPoint(1) .addExitPoint(0) .addEdge(1, 0) .build(); assertEquals(expected, emptyGraph.getTransverseGraph()); }
@Test public void testGetTransverseGraphLoopingGraph() { FlowGraph<Integer> expected = new FlowGraphBuilder<Integer>() .addEntryPoint(11) .addExitPoint(0) .addEdge(1, 0) .addEdge(2, 1) .addEdge(3, 1) .addEdge(3, 2) .addEdge(4, 3) .addEdge(3, 4) .addEdge(5, 4) .addEdge(6, 4) .addEdge(7, 5) .addEdge(7, 6) .addEdge(4, 7) .addEdge(8, 7) .addEdge(3, 8) .addEdge(9, 8) .addEdge(10, 8) .addEdge(1, 9) .addEdge(7, 10) .addEdge(11, 10) .build(); assertEquals(expected, loopingGraph.getTransverseGraph()); }