/** . */ public void testSubgraphListener() { UndirectedGraph<String, DefaultEdge> g = init(true); UndirectedSubgraph<String, DefaultEdge> sub = new UndirectedSubgraph<String, DefaultEdge>(g, null, null); assertEquals(g.vertexSet(), sub.vertexSet()); assertEquals(g.edgeSet(), sub.edgeSet()); Set<String> vset = new HashSet<String>(g.vertexSet()); g.removeVertex(v1); vset.remove(v1); assertEquals(vset, sub.vertexSet()); // not losing track assertEquals(g.edgeSet(), sub.edgeSet()); }
/** @see Graph#edgesOf(Object) */ public Set<E> edgesOf(V vertex) { ArrayUnenforcedSet<E> inAndOut = new ArrayUnenforcedSet<E>(getEdgeContainer(vertex).incoming); inAndOut.addAll(getEdgeContainer(vertex).outgoing); // we have two copies for each self-loop - remove one of them. if (allowingLoops) { Set<E> loops = getAllEdges(vertex, vertex); for (int i = 0; i < inAndOut.size(); ) { Object e = inAndOut.get(i); if (loops.contains(e)) { inAndOut.remove(i); loops.remove(e); // so we remove it only once } else { i++; } } } return Collections.unmodifiableSet(inAndOut); }
/** * . * * @param e */ public void removeEdge(EE e) { vertexEdges.remove(e); }
/** * . * * @param e */ public void removeOutgoingEdge(EE e) { outgoing.remove(e); }
/** * . * * @param e */ public void removeIncomingEdge(EE e) { incoming.remove(e); }
/** SEM Tests the edge- and vertex-comparator */ @Test public void testSemanticCheck() { /* * a---<3>---b * | | * g1 = <4> <1> g2 = A---<6>---b---<5>---B * | | * A---<2>---B */ SimpleGraph<String, Integer> g1 = new SimpleGraph<>(Integer.class), g2 = new SimpleGraph<>(Integer.class); g1.addVertex("a"); g1.addVertex("b"); g1.addVertex("A"); g1.addVertex("B"); g1.addEdge("a", "b", 3); g1.addEdge("b", "B", 1); g1.addEdge("B", "A", 2); g1.addEdge("A", "a", 4); g2.addVertex("A"); g2.addVertex("b"); g2.addVertex("B"); g2.addEdge("A", "b", 6); g2.addEdge("b", "B", 5); /* SEM-1 * test vertex and edge comparator */ VF2SubgraphIsomorphismInspector<String, Integer> vf2 = new VF2SubgraphIsomorphismInspector<>(g1, g2, new VertexComp(), new EdgeComp()); Iterator<GraphMapping<String, Integer>> iter = vf2.getMappings(); assertEquals("[A=A B=b a=~~ b=B]", iter.next().toString()); assertEquals(false, iter.hasNext()); /* SEM-2 * test vertex comparator */ VF2SubgraphIsomorphismInspector<String, Integer> vf3 = new VF2SubgraphIsomorphismInspector<>( g1, g2, new VertexComp(), new AlwaysEqualComparator<>()); Iterator<GraphMapping<String, Integer>> iter2 = vf3.getMappings(); Set<String> mappings = new HashSet<>(Arrays.asList("[A=A B=b a=~~ b=B]", "[A=~~ B=B a=A b=b]")); assertEquals(true, mappings.remove(iter2.next().toString())); assertEquals(true, mappings.remove(iter2.next().toString())); assertEquals(false, iter2.hasNext()); /* SEM-3 * test edge comparator */ VF2SubgraphIsomorphismInspector<String, Integer> vf4 = new VF2SubgraphIsomorphismInspector<>( g1, g2, new AlwaysEqualComparator<>(), new EdgeComp()); Iterator<GraphMapping<String, Integer>> iter3 = vf4.getMappings(); Set<String> mappings2 = new HashSet<>(Arrays.asList("[A=A B=b a=~~ b=B]", "[A=A B=~~ a=b b=B]")); assertEquals(true, mappings2.remove(iter3.next().toString())); assertEquals(true, mappings2.remove(iter3.next().toString())); assertEquals(false, iter3.hasNext()); }
/** Tests edge cases on directed graphs */ @Test public void testEdgeCasesDirectedGraph() { /* ECD-1: graph and subgraph empty */ DirectedGraph<Integer, DefaultEdge> dg0v = new DefaultDirectedGraph<>(DefaultEdge.class), dg0v2 = new DefaultDirectedGraph<>(DefaultEdge.class); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf1 = new VF2SubgraphIsomorphismInspector<>(dg0v, dg0v2); assertEquals("[]", vf1.getMappings().next().toString()); /* ECD-2: graph non-empty, subgraph empty */ DirectedGraph<Integer, DefaultEdge> dg4v3e = new DefaultDirectedGraph<>(DefaultEdge.class); dg4v3e.addVertex(1); dg4v3e.addVertex(2); dg4v3e.addVertex(3); dg4v3e.addVertex(4); dg4v3e.addEdge(1, 2); dg4v3e.addEdge(3, 2); dg4v3e.addEdge(3, 4); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf2 = new VF2SubgraphIsomorphismInspector<>(dg4v3e, dg0v); assertEquals("[1=~~ 2=~~ 3=~~ 4=~~]", vf2.getMappings().next().toString()); /* ECD-3: graph empty, subgraph non-empty */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf3 = new VF2SubgraphIsomorphismInspector<>(dg0v, dg4v3e); assertEquals(false, vf3.isomorphismExists()); /* ECD-4: graph non-empty, subgraph single vertex */ DirectedGraph<Integer, DefaultEdge> dg1v = new DefaultDirectedGraph<>(DefaultEdge.class); dg1v.addVertex(5); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf4 = new VF2SubgraphIsomorphismInspector<>(dg4v3e, dg1v); Iterator<GraphMapping<Integer, DefaultEdge>> iter4 = vf4.getMappings(); Set<String> mappings = new HashSet<>( Arrays.asList( "[1=5 2=~~ 3=~~ 4=~~]", "[1=~~ 2=5 3=~~ 4=~~]", "[1=~~ 2=~~ 3=5 4=~~]", "[1=~~ 2=~~ 3=~~ 4=5]")); assertEquals(true, mappings.remove(iter4.next().toString())); assertEquals(true, mappings.remove(iter4.next().toString())); assertEquals(true, mappings.remove(iter4.next().toString())); assertEquals(true, mappings.remove(iter4.next().toString())); assertEquals(false, iter4.hasNext()); /* ECD-5: graph empty, subgraph single vertex */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf5 = new VF2SubgraphIsomorphismInspector<>(dg0v, dg1v); assertEquals(false, vf5.isomorphismExists()); /* ECD-6: subgraph with vertices, but no edges */ DirectedGraph<Integer, DefaultEdge> dg3v0e = new DefaultDirectedGraph<>(DefaultEdge.class); dg3v0e.addVertex(5); dg3v0e.addVertex(6); dg3v0e.addVertex(7); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf6 = new VF2SubgraphIsomorphismInspector<>(dg4v3e, dg3v0e); assertEquals(false, vf6.isomorphismExists()); /* ECD-7: graph and subgraph with vertices, but no edges */ DirectedGraph<Integer, DefaultEdge> dg2v0e = new DefaultDirectedGraph<>(DefaultEdge.class); dg2v0e.addVertex(1); dg2v0e.addVertex(2); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf7 = new VF2SubgraphIsomorphismInspector<>(dg3v0e, dg2v0e); Iterator<GraphMapping<Integer, DefaultEdge>> iter7 = vf7.getMappings(); Set<String> mappings7 = new HashSet<>( Arrays.asList( "[5=1 6=2 7=~~]", "[5=1 6=~~ 7=2]", "[5=2 6=1 7=~~]", "[5=~~ 6=1 7=2]", "[5=2 6=~~ 7=1]", "[5=~~ 6=2 7=1]")); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(false, iter7.hasNext()); /* ECD-8: graph no edges, subgraph contains single edge */ DirectedGraph<Integer, DefaultEdge> dg2v1e = new DefaultDirectedGraph<>(DefaultEdge.class); dg2v1e.addVertex(5); dg2v1e.addVertex(6); dg2v1e.addEdge(5, 6); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf8 = new VF2SubgraphIsomorphismInspector<>(dg3v0e, dg2v1e); assertEquals(false, vf8.isomorphismExists()); /* ECD-9: complete graphs of different size, * graph smaller than subgraph */ DirectedGraph<Integer, DefaultEdge> dg5c = new DefaultDirectedGraph<>(DefaultEdge.class); dg5c.addVertex(0); dg5c.addVertex(1); dg5c.addVertex(2); dg5c.addVertex(3); dg5c.addVertex(4); dg5c.addEdge(0, 1); dg5c.addEdge(0, 2); dg5c.addEdge(0, 3); dg5c.addEdge(0, 4); dg5c.addEdge(1, 2); dg5c.addEdge(1, 3); dg5c.addEdge(1, 4); dg5c.addEdge(2, 3); dg5c.addEdge(2, 4); dg5c.addEdge(3, 4); DirectedGraph<Integer, DefaultEdge> dg4c = new DefaultDirectedGraph<>(DefaultEdge.class); dg4c.addVertex(0); dg4c.addVertex(1); dg4c.addVertex(2); dg4c.addVertex(3); dg4c.addEdge(0, 1); dg4c.addEdge(0, 2); dg4c.addEdge(0, 3); dg4c.addEdge(1, 2); dg4c.addEdge(1, 3); dg4c.addEdge(2, 3); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf9 = new VF2SubgraphIsomorphismInspector<>(dg4c, dg5c); assertEquals(false, vf9.isomorphismExists()); /* ECD-10: complete graphs of different size, * graph bigger than subgraph */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf10 = new VF2SubgraphIsomorphismInspector<>(dg5c, dg4c); Iterator<GraphMapping<Integer, DefaultEdge>> iter10 = vf10.getMappings(); Set<String> mappings10 = new HashSet<>( Arrays.asList( "[0=0 1=1 2=2 3=3 4=~~]", "[0=0 1=1 2=2 3=~~ 4=3]", "[0=0 1=1 2=~~ 3=2 4=3]", "[0=0 1=~~ 2=1 3=2 4=3]", "[0=~~ 1=0 2=1 3=2 4=3]")); assertEquals(true, mappings10.remove(iter10.next().toString())); assertEquals(true, mappings10.remove(iter10.next().toString())); assertEquals(true, mappings10.remove(iter10.next().toString())); assertEquals(true, mappings10.remove(iter10.next().toString())); assertEquals(true, mappings10.remove(iter10.next().toString())); assertEquals(false, iter10.hasNext()); /* ECD-11: isomorphic graphs */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf11 = new VF2SubgraphIsomorphismInspector<>(dg4v3e, dg4v3e); Iterator<GraphMapping<Integer, DefaultEdge>> iter11 = vf11.getMappings(); assertEquals("[1=1 2=2 3=3 4=4]", iter11.next().toString()); assertEquals(false, iter11.hasNext()); /* ECD-12: not connected graphs of different size */ DirectedGraph<Integer, DefaultEdge> dg6v4enc = new DefaultDirectedGraph<>(DefaultEdge.class); dg6v4enc.addVertex(0); dg6v4enc.addVertex(1); dg6v4enc.addVertex(2); dg6v4enc.addVertex(3); dg6v4enc.addVertex(4); dg6v4enc.addVertex(5); dg6v4enc.addEdge(1, 2); dg6v4enc.addEdge(2, 3); dg6v4enc.addEdge(3, 1); dg6v4enc.addEdge(4, 5); DirectedGraph<Integer, DefaultEdge> dg5v4enc = new DefaultDirectedGraph<>(DefaultEdge.class); dg5v4enc.addVertex(6); dg5v4enc.addVertex(7); dg5v4enc.addVertex(8); dg5v4enc.addVertex(9); dg5v4enc.addVertex(10); dg5v4enc.addEdge(7, 6); dg5v4enc.addEdge(9, 8); dg5v4enc.addEdge(10, 9); dg5v4enc.addEdge(8, 10); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vf12 = new VF2SubgraphIsomorphismInspector<>(dg6v4enc, dg5v4enc); Iterator<GraphMapping<Integer, DefaultEdge>> iter12 = vf12.getMappings(); Set<String> mappings12 = new HashSet<>( Arrays.asList( "[0=~~ 1=8 2=10 3=9 4=7 5=6]", "[0=~~ 1=9 2=8 3=10 4=7 5=6]", "[0=~~ 1=10 2=9 3=8 4=7 5=6]")); assertEquals(true, mappings12.remove(iter12.next().toString())); assertEquals(true, mappings12.remove(iter12.next().toString())); assertEquals(true, mappings12.remove(iter12.next().toString())); assertEquals(false, iter12.hasNext()); }
/** Tests edge cases on simple graphs */ @Test public void testEdgeCasesSimpleGraph() { /* ECS-1: graph and subgraph empty */ SimpleGraph<Integer, DefaultEdge> sg0v = new SimpleGraph<>(DefaultEdge.class), sg0v2 = new SimpleGraph<>(DefaultEdge.class); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs1 = new VF2SubgraphIsomorphismInspector<>(sg0v, sg0v2); assertEquals("[]", vfs1.getMappings().next().toString()); /* ECS-2: graph non-empty, subgraph empty */ SimpleGraph<Integer, DefaultEdge> sg4v3e = new SimpleGraph<>(DefaultEdge.class); sg4v3e.addVertex(1); sg4v3e.addVertex(2); sg4v3e.addVertex(3); sg4v3e.addVertex(4); sg4v3e.addEdge(1, 2); sg4v3e.addEdge(3, 2); sg4v3e.addEdge(3, 4); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs2 = new VF2SubgraphIsomorphismInspector<>(sg4v3e, sg0v); assertEquals("[1=~~ 2=~~ 3=~~ 4=~~]", vfs2.getMappings().next().toString()); /* ECS-3: graph empty, subgraph non-empty */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs3 = new VF2SubgraphIsomorphismInspector<>(sg0v, sg4v3e); assertEquals(false, vfs3.isomorphismExists()); /* ECS-4: graph non-empty, subgraph single vertex */ SimpleGraph<Integer, DefaultEdge> sg1v = new SimpleGraph<>(DefaultEdge.class); sg1v.addVertex(5); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs4 = new VF2SubgraphIsomorphismInspector<>(sg4v3e, sg1v); Iterator<GraphMapping<Integer, DefaultEdge>> iter = vfs4.getMappings(); Set<String> mappings = new HashSet<>( Arrays.asList( "[1=5 2=~~ 3=~~ 4=~~]", "[1=~~ 2=5 3=~~ 4=~~]", "[1=~~ 2=~~ 3=5 4=~~]", "[1=~~ 2=~~ 3=~~ 4=5]")); assertEquals(true, mappings.remove(iter.next().toString())); assertEquals(true, mappings.remove(iter.next().toString())); assertEquals(true, mappings.remove(iter.next().toString())); assertEquals(true, mappings.remove(iter.next().toString())); assertEquals(false, iter.hasNext()); /* ECS-5: graph empty, subgraph single vertex */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs5 = new VF2SubgraphIsomorphismInspector<>(sg0v, sg1v); assertEquals(false, vfs5.isomorphismExists()); /* ECS-6: subgraph with vertices, but no edges */ SimpleGraph<Integer, DefaultEdge> sg3v0e = new SimpleGraph<>(DefaultEdge.class); sg3v0e.addVertex(5); sg3v0e.addVertex(6); sg3v0e.addVertex(7); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs6 = new VF2SubgraphIsomorphismInspector<>(sg4v3e, sg3v0e); assertEquals(false, vfs6.isomorphismExists()); /* ECS-7: graph and subgraph with vertices, but no edges */ SimpleGraph<Integer, DefaultEdge> sg2v0e = new SimpleGraph<>(DefaultEdge.class); sg2v0e.addVertex(1); sg2v0e.addVertex(2); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs7 = new VF2SubgraphIsomorphismInspector<>(sg3v0e, sg2v0e); Iterator<GraphMapping<Integer, DefaultEdge>> iter7 = vfs7.getMappings(); Set<String> mappings7 = new HashSet<>( Arrays.asList( "[5=1 6=2 7=~~]", "[5=1 6=~~ 7=2]", "[5=2 6=1 7=~~]", "[5=~~ 6=1 7=2]", "[5=2 6=~~ 7=1]", "[5=~~ 6=2 7=1]")); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(true, mappings7.remove(iter7.next().toString())); assertEquals(false, iter7.hasNext()); /* ECS-8: graph no edges, subgraph contains single edge */ SimpleGraph<Integer, DefaultEdge> sg2v1e = new SimpleGraph<>(DefaultEdge.class); sg2v1e.addVertex(5); sg2v1e.addVertex(6); sg2v1e.addEdge(5, 6); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs8 = new VF2SubgraphIsomorphismInspector<>(sg3v0e, sg2v1e); assertEquals(false, vfs8.isomorphismExists()); /* ECS-9: complete graphs of different size, * graph smaller than subgraph */ SimpleGraph<Integer, DefaultEdge> sg5k = new SimpleGraph<>(DefaultEdge.class); sg5k.addVertex(0); sg5k.addVertex(1); sg5k.addVertex(2); sg5k.addVertex(3); sg5k.addVertex(4); sg5k.addEdge(0, 1); sg5k.addEdge(0, 2); sg5k.addEdge(0, 3); sg5k.addEdge(0, 4); sg5k.addEdge(1, 2); sg5k.addEdge(1, 3); sg5k.addEdge(1, 4); sg5k.addEdge(2, 3); sg5k.addEdge(2, 4); sg5k.addEdge(3, 4); SimpleGraph<Integer, DefaultEdge> sg4k = new SimpleGraph<>(DefaultEdge.class); sg4k.addVertex(0); sg4k.addVertex(1); sg4k.addVertex(2); sg4k.addVertex(3); sg4k.addEdge(0, 1); sg4k.addEdge(0, 2); sg4k.addEdge(0, 3); sg4k.addEdge(1, 2); sg4k.addEdge(1, 3); sg4k.addEdge(2, 3); SimpleGraph<Integer, DefaultEdge> sg3k = new SimpleGraph<>(DefaultEdge.class); sg3k.addVertex(0); sg3k.addVertex(1); sg3k.addVertex(2); sg3k.addEdge(0, 1); sg3k.addEdge(0, 2); sg3k.addEdge(1, 2); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs9 = new VF2SubgraphIsomorphismInspector<>(sg4k, sg5k); assertEquals(false, vfs9.isomorphismExists()); /* ECS-10: complete graphs of different size, * graph bigger than subgraph */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs10 = new VF2SubgraphIsomorphismInspector<>(sg4k, sg3k); Iterator<GraphMapping<Integer, DefaultEdge>> iter10 = vfs10.getMappings(); Set<String> mappings10 = new HashSet<>( Arrays.asList( "[0=0 1=1 2=2 3=~~]", "[0=0 1=1 2=~~ 3=2]", "[0=0 1=~~ 2=1 3=2]", "[0=~~ 1=0 2=1 3=2]", "[0=1 1=0 2=2 3=~~]", "[0=1 1=0 2=~~ 3=2]", "[0=1 1=~~ 2=0 3=2]", "[0=~~ 1=1 2=0 3=2]", "[0=2 1=1 2=0 3=~~]", "[0=2 1=1 2=~~ 3=0]", "[0=2 1=~~ 2=1 3=0]", "[0=~~ 1=2 2=1 3=0]", "[0=0 1=2 2=1 3=~~]", "[0=0 1=2 2=~~ 3=1]", "[0=0 1=~~ 2=2 3=1]", "[0=~~ 1=0 2=2 3=1]", "[0=1 1=2 2=0 3=~~]", "[0=1 1=2 2=~~ 3=0]", "[0=1 1=~~ 2=2 3=0]", "[0=~~ 1=1 2=2 3=0]", "[0=2 1=0 2=1 3=~~]", "[0=2 1=0 2=~~ 3=1]", "[0=2 1=~~ 2=0 3=1]", "[0=~~ 1=2 2=0 3=1]")); for (int i = 0; i < 24; i++) assertEquals(true, mappings10.remove(iter10.next().toString())); assertEquals(false, iter10.hasNext()); /* ECS-11: isomorphic graphs */ VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs11 = new VF2SubgraphIsomorphismInspector<>(sg4v3e, sg4v3e); Iterator<GraphMapping<Integer, DefaultEdge>> iter11 = vfs11.getMappings(); Set<String> mappings11 = new HashSet<>(Arrays.asList("[1=1 2=2 3=3 4=4]", "[1=4 2=3 3=2 4=1]")); assertEquals(true, mappings11.remove(iter11.next().toString())); assertEquals(true, mappings11.remove(iter11.next().toString())); assertEquals(false, iter11.hasNext()); /* ECS-12: not connected graphs of different size */ SimpleGraph<Integer, DefaultEdge> sg6v4enc = new SimpleGraph<>(DefaultEdge.class); sg6v4enc.addVertex(0); sg6v4enc.addVertex(1); sg6v4enc.addVertex(2); sg6v4enc.addVertex(3); sg6v4enc.addVertex(4); sg6v4enc.addVertex(5); sg6v4enc.addEdge(1, 2); sg6v4enc.addEdge(2, 3); sg6v4enc.addEdge(3, 1); sg6v4enc.addEdge(4, 5); SimpleGraph<Integer, DefaultEdge> sg5v4enc = new SimpleGraph<>(DefaultEdge.class); sg5v4enc.addVertex(6); sg5v4enc.addVertex(7); sg5v4enc.addVertex(8); sg5v4enc.addVertex(9); sg5v4enc.addVertex(10); sg5v4enc.addEdge(7, 6); sg5v4enc.addEdge(9, 8); sg5v4enc.addEdge(10, 9); sg5v4enc.addEdge(8, 10); VF2SubgraphIsomorphismInspector<Integer, DefaultEdge> vfs12 = new VF2SubgraphIsomorphismInspector<>(sg6v4enc, sg5v4enc); Iterator<GraphMapping<Integer, DefaultEdge>> iter12 = vfs12.getMappings(); Set<String> mappings12 = new HashSet<>( Arrays.asList( "[0=~~ 1=8 2=10 3=9 4=7 5=6]", "[0=~~ 1=9 2=8 3=10 4=7 5=6]", "[0=~~ 1=10 2=9 3=8 4=7 5=6]", "[0=~~ 1=8 2=10 3=9 4=6 5=7]", "[0=~~ 1=9 2=8 3=10 4=6 5=7]", "[0=~~ 1=10 2=9 3=8 4=6 5=7]", "[0=~~ 1=10 2=8 3=9 4=7 5=6]", "[0=~~ 1=8 2=9 3=10 4=7 5=6]", "[0=~~ 1=9 2=10 3=8 4=7 5=6]", "[0=~~ 1=10 2=8 3=9 4=6 5=7]", "[0=~~ 1=8 2=9 3=10 4=6 5=7]", "[0=~~ 1=9 2=10 3=8 4=6 5=7]")); for (int i = 0; i < 12; i++) assertEquals(true, mappings12.remove(iter12.next().toString())); assertEquals(false, iter12.hasNext()); }