diff --git a/src/main/java/org/jpeek/graph/Disjoint.java b/src/main/java/org/jpeek/graph/Disjoint.java index a76192fc..b937d0e8 100644 --- a/src/main/java/org/jpeek/graph/Disjoint.java +++ b/src/main/java/org/jpeek/graph/Disjoint.java @@ -54,19 +54,19 @@ public List> value() throws Exception { final List> result = new ArrayList<>(unvisited.size()); while (!unvisited.isEmpty()) { final Node node = unvisited.iterator().next(); - final Set adding = new HashSet<>(); - adding.add(node); + final Set visiting = new HashSet<>(); + visiting.add(node); final Set current = new HashSet<>(); - while (!adding.isEmpty()) { - final Node visit = adding.iterator().next(); + while (!visiting.isEmpty()) { + final Node visit = visiting.iterator().next(); current.add(visit); for (final Node connexion:visit.connections()) { if (!current.contains(connexion)) { - adding.add(connexion); + visiting.add(connexion); } } unvisited.remove(visit); - adding.remove(visit); + visiting.remove(visit); } result.add(current); } diff --git a/src/test/java/org/jpeek/graph/DisjointTest.java b/src/test/java/org/jpeek/graph/DisjointTest.java index f482fcc5..0a00004a 100644 --- a/src/test/java/org/jpeek/graph/DisjointTest.java +++ b/src/test/java/org/jpeek/graph/DisjointTest.java @@ -74,4 +74,36 @@ public void calculatesDisjointSets() throws Exception { ).affirm(); } + @Test + @SuppressWarnings("unchecked") + public void calculatesDisjointSetsForUnconnected() throws Exception { + final Node one = new Node.Simple("1"); + final Node two = new Node.Simple("2"); + final Node three = new Node.Simple("3"); + final Node four = new Node.Simple("4"); + final Graph graph = new FakeGraph( + new ListOf<>(one, two, three, four) + ); + new Assertion<>( + "Must build disjoint sets for unconnected graph", + new Disjoint(graph).value(), + new AllOf>>( + new ListOf<>( + new HasValuesMatching<>( + set -> set.contains(one) && set.size() == 1 + ), + new HasValuesMatching<>( + set -> set.contains(two) && set.size() == 1 + ), + new HasValuesMatching<>( + set -> set.contains(three) && set.size() == 1 + ), + new HasValuesMatching<>( + set -> set.contains(four) && set.size() == 1 + ) + ) + ) + ).affirm(); + } + }