### Question:
FlowGraph { public Map<V, Set<V>> getPredecessors() { return predecessors; } 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 testGetAllPredecessorsEmptyGraph() { Map<Integer, Set<Integer>> expected = new HashMap<>(); expected.put(0, new HashSet<>()); expected.put(1, new HashSet<>(Arrays.asList(0))); assertEquals(expected, emptyGraph.getPredecessors()); }
@Test public void testGetPredecessors() { assertEquals(new HashSet<>(), emptyGraph.getPredecessors(0)); assertEquals(new HashSet<>(Arrays.asList(0)), emptyGraph.getPredecessors(1)); }
@Test(expected = IllegalArgumentException.class) public void testGetPredecessorsVertexNotInGraph() { emptyGraph.getPredecessors(2); }
@Test public void testGetAllPredecessorsLoopingGraph() { Map<Integer, Set<Integer>> expected = new HashMap<>(); expected.put(0, new HashSet<>()); expected.put(1, new HashSet<>(Arrays.asList(0, 9))); expected.put(2, new HashSet<>(Arrays.asList(1))); expected.put(3, new HashSet<>(Arrays.asList(1, 2, 4, 8))); expected.put(4, new HashSet<>(Arrays.asList(3, 7))); expected.put(5, new HashSet<>(Arrays.asList(4))); expected.put(6, new HashSet<>(Arrays.asList(4))); expected.put(7, new HashSet<>(Arrays.asList(5, 6, 10))); expected.put(8, new HashSet<>(Arrays.asList(7))); expected.put(9, new HashSet<>(Arrays.asList(8))); expected.put(10, new HashSet<>(Arrays.asList(8))); expected.put(11, new HashSet<>(Arrays.asList(10))); assertEquals(expected, loopingGraph.getPredecessors()); }