int inDegree = graph.inDegree(node); inDegreeMap.put(node, inDegree);
@Test public void inDegree_isolatedNode() { addNode(N1); assertThat(graph.inDegree(N1)).isEqualTo(0); }
@Test public void inDegree_nodeNotInGraph() { try { graph.inDegree(NODE_NOT_IN_GRAPH); fail(ERROR_NODE_NOT_IN_GRAPH); } catch (IllegalArgumentException e) { assertNodeNotInGraphErrorMessage(e); } }
@Test public void transpose_directedGraph() { MutableGraph<Integer> directedGraph = GraphBuilder.directed().allowsSelfLoops(true).build(); directedGraph.putEdge(N1, N3); directedGraph.putEdge(N3, N1); directedGraph.putEdge(N1, N2); directedGraph.putEdge(N1, N1); directedGraph.putEdge(N3, N4); MutableGraph<Integer> expectedTranspose = GraphBuilder.directed().allowsSelfLoops(true).build(); expectedTranspose.putEdge(N3, N1); expectedTranspose.putEdge(N1, N3); expectedTranspose.putEdge(N2, N1); expectedTranspose.putEdge(N1, N1); expectedTranspose.putEdge(N4, N3); Graph<Integer> transpose = transpose(directedGraph); assertThat(transpose).isEqualTo(expectedTranspose); assertThat(transpose(transpose)).isSameAs(directedGraph); AbstractGraphTest.validateGraph(transpose); for (Integer node : directedGraph.nodes()) { assertThat(directedGraph.inDegree(node)).isSameAs(transpose.outDegree(node)); assertThat(directedGraph.outDegree(node)).isSameAs(transpose.inDegree(node)); } assertThat(transpose.successors(N1)).doesNotContain(N2); directedGraph.putEdge(N2, N1); // View should be updated. assertThat(transpose.successors(N1)).contains(N2); AbstractGraphTest.validateGraph(transpose); }
@Override public int inDegree(N node) { checkNotNull(node, "node"); checkArgument(delegate.nodes().contains(node), NODE_NOT_IN_TREE, node); return delegate.inDegree(node); }
@Override public Set<H> getAll(final Type t) { Set<H> result = new HashSet<>(1); TypeToken tt = TypeToken.of(t); MutableGraph<TypeToken> traverseGraph = Graphs.clone(typeGraph); Set<TypeToken> nodes = traverseGraph.nodes(); List<TypeToken> nodesToRemove = new ArrayList<>(); do { for (TypeToken token : nodes) { if (traverseGraph.inDegree(token) == 0) { nodesToRemove.add(token); if (tt.isSubtypeOf(token)) { result.add(handlers.get(token)); } } } for (TypeToken token : nodesToRemove) { if (!traverseGraph.removeNode(token)) { throw new IllegalStateException("Cannot remove " + token + " from " + traverseGraph); } } nodesToRemove.clear(); nodes = traverseGraph.nodes(); } while (result.isEmpty() && !nodes.isEmpty()); return result; }
@Override public Set<H> getAll(final Type t) { Set<H> result = new HashSet<>(1); TypeToken tt = TypeToken.of(t); MutableGraph<TypeToken> traverseGraph = Graphs.clone(typeGraph); Set<TypeToken> nodes = traverseGraph.nodes(); List<TypeToken> nodesToRemove = new ArrayList<>(); do { for (TypeToken token : nodes) { if (traverseGraph.inDegree(token) == 0) { nodesToRemove.add(token); if (tt.isSubtypeOf(token)) { result.add(handlers.get(token)); } } } for (TypeToken token : nodesToRemove) { if (!traverseGraph.removeNode(token)) { throw new IllegalStateException("Cannot remove " + token + " from " + traverseGraph); } } nodesToRemove.clear(); nodes = traverseGraph.nodes(); } while (result.isEmpty() && !nodes.isEmpty()); return result; }
@Test public void inDegree_isolatedNode() { addNode(N1); assertThat(graph.inDegree(N1)).isEqualTo(0); }
@Test public void inDegree_nodeNotInGraph() { try { graph.inDegree(NODE_NOT_IN_GRAPH); fail(ERROR_NODE_NOT_IN_GRAPH); } catch (IllegalArgumentException e) { assertNodeNotInGraphErrorMessage(e); } }
@Test public void transpose_directedGraph() { MutableGraph<Integer> directedGraph = GraphBuilder.directed().allowsSelfLoops(true).build(); directedGraph.putEdge(N1, N3); directedGraph.putEdge(N3, N1); directedGraph.putEdge(N1, N2); directedGraph.putEdge(N1, N1); directedGraph.putEdge(N3, N4); MutableGraph<Integer> expectedTranspose = GraphBuilder.directed().allowsSelfLoops(true).build(); expectedTranspose.putEdge(N3, N1); expectedTranspose.putEdge(N1, N3); expectedTranspose.putEdge(N2, N1); expectedTranspose.putEdge(N1, N1); expectedTranspose.putEdge(N4, N3); Graph<Integer> transpose = transpose(directedGraph); assertThat(transpose).isEqualTo(expectedTranspose); assertThat(transpose(transpose)).isSameAs(directedGraph); AbstractGraphTest.validateGraph(transpose); for (Integer node : directedGraph.nodes()) { assertThat(directedGraph.inDegree(node)).isSameAs(transpose.outDegree(node)); assertThat(directedGraph.outDegree(node)).isSameAs(transpose.inDegree(node)); } assertThat(transpose.successors(N1)).doesNotContain(N2); directedGraph.putEdge(N2, N1); // View should be updated. assertThat(transpose.successors(N1)).contains(N2); AbstractGraphTest.validateGraph(transpose); }