public void dispose() { for (Node node : nodeMap.values()) { graph.removeNode(node); node.dispose(); } nodeMap.clear(); } }
@Test public void removeNode_nodeNotPresent() { addNode(N1); ImmutableSet<Integer> nodes = ImmutableSet.copyOf(graph.nodes()); assertThat(graph.removeNode(NODE_NOT_IN_GRAPH)).isFalse(); assertThat(graph.nodes()).containsExactlyElementsIn(nodes); }
@Test public void removeNode_existingNode() { putEdge(N1, N2); putEdge(N4, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.removeNode(N1)).isFalse(); assertThat(graph.nodes()).containsExactly(N2, N4); assertThat(graph.adjacentNodes(N2)).isEmpty(); assertThat(graph.adjacentNodes(N4)).isEmpty(); }
@Test public void removeNode_antiparallelEdges() { putEdge(N1, N2); putEdge(N2, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.nodes()).containsExactly(N2); assertThat(graph.edges()).isEmpty(); assertThat(graph.removeNode(N2)).isTrue(); assertThat(graph.nodes()).isEmpty(); assertThat(graph.edges()).isEmpty(); }
@Test public void removeNode_existingNodeWithSelfLoopEdge() { addNode(N1); putEdge(N1, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.nodes()).isEmpty(); }
@Test public void removeNode_existingNodeWithSelfLoopEdge() { addNode(N1); putEdge(N1, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.nodes()).isEmpty(); }
@Test public void removeNode_queryAfterRemoval() { addNode(N1); @SuppressWarnings("unused") Set<Integer> unused = graph.adjacentNodes(N1); // ensure cache (if any) is populated assertThat(graph.removeNode(N1)).isTrue(); try { graph.adjacentNodes(N1); fail(ERROR_NODE_NOT_IN_GRAPH); } catch (IllegalArgumentException e) { assertNodeNotInGraphErrorMessage(e); } }
int numNodesToRemove = gen.nextInt(NUM_NODES); for (int i = 0; i < numNodesToRemove; ++i) { assertThat(graph.removeNode(nodeList.get(i))).isTrue(); assertThat(graph.removeNode(nodeList.get(i))).isTrue();
@Override public boolean removeVertex(V v) { return graph.removeNode(v); }
@Override public boolean remove(final Type type) { TypeToken<?> tt = TypeToken.of(type); if (typeGraph.removeNode(tt)) { handlers.remove(tt); return true; } else { return false; } }
@Override public boolean remove(final Type type) { TypeToken<?> tt = TypeToken.of(type); if (typeGraph.removeNode(tt)) { handlers.remove(tt); return true; } else { return false; } }
@Override public boolean removeNode(N node) { checkNotNull(node, "node"); if (!nodes().contains(node)) { return false; } for (N nodeToRemove : Traverser.forTree(delegate).breadthFirst(node)) { delegate.removeNode(nodeToRemove); depths.remove(nodeToRemove); } if (root.isPresent() && root.get().equals(node)) { setRoot(Optional.empty()); } // Reset the height, since we don't know how it was affected by removing the subtree. height = Optional.empty(); return true; }
@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 removeNode_existingNode() { putEdge(N1, N2); putEdge(N4, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.removeNode(N1)).isFalse(); assertThat(graph.nodes()).containsExactly(N2, N4); assertThat(graph.adjacentNodes(N2)).isEmpty(); assertThat(graph.adjacentNodes(N4)).isEmpty(); }
@Test public void removeNode_nodeNotPresent() { addNode(N1); ImmutableSet<Integer> nodes = ImmutableSet.copyOf(graph.nodes()); assertThat(graph.removeNode(NODE_NOT_IN_GRAPH)).isFalse(); assertThat(graph.nodes()).containsExactlyElementsIn(nodes); }
@Test public void removeNode_antiparallelEdges() { putEdge(N1, N2); putEdge(N2, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.nodes()).containsExactly(N2); assertThat(graph.edges()).isEmpty(); assertThat(graph.removeNode(N2)).isTrue(); assertThat(graph.nodes()).isEmpty(); assertThat(graph.edges()).isEmpty(); }
@Test public void removeNode_existingNodeWithSelfLoopEdge() { addNode(N1); putEdge(N1, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.nodes()).isEmpty(); }
@Test public void removeNode_existingNodeWithSelfLoopEdge() { addNode(N1); putEdge(N1, N1); assertThat(graph.removeNode(N1)).isTrue(); assertThat(graph.nodes()).isEmpty(); }
@Test public void removeNode_queryAfterRemoval() { addNode(N1); @SuppressWarnings("unused") Set<Integer> unused = graph.adjacentNodes(N1); // ensure cache (if any) is populated assertThat(graph.removeNode(N1)).isTrue(); try { graph.adjacentNodes(N1); fail(ERROR_NODE_NOT_IN_GRAPH); } catch (IllegalArgumentException e) { assertNodeNotInGraphErrorMessage(e); } }