@Test
  public void testSubgraph() {
    DirectedGraph<Integer, DefaultEdge> g1 =
        SubgraphIsomorphismTestUtils.randomGraph(10, 30, 12345);
    DirectedGraph<Integer, DefaultEdge> g2 =
        SubgraphIsomorphismTestUtils.randomSubgraph(g1, 7, 54321);

    VF2GraphIsomorphismInspector<Integer, DefaultEdge> vf2 =
        new VF2GraphIsomorphismInspector<Integer, DefaultEdge>(g1, g2);
    assertEquals(false, vf2.isomorphismExists());
  }
  @Test
  public void testAutomorphism() {
    /*
     *   v1-----v2
     *    \    /
     *     \  /
     *      v3
     */
    SimpleGraph<String, DefaultEdge> g1 = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

    String v1 = "v1", v2 = "v2", v3 = "v3";

    g1.addVertex(v1);
    g1.addVertex(v2);
    g1.addVertex(v3);

    g1.addEdge(v1, v2);
    g1.addEdge(v2, v3);
    g1.addEdge(v3, v1);

    VF2GraphIsomorphismInspector<String, DefaultEdge> vf2 =
        new VF2GraphIsomorphismInspector<String, DefaultEdge>(g1, g1);

    Iterator<GraphMapping<String, DefaultEdge>> iter = vf2.getMappings();

    Set<String> mappings =
        new HashSet<String>(
            Arrays.asList(
                "[v1=v1 v2=v2 v3=v3]",
                "[v1=v1 v2=v3 v3=v2]",
                "[v1=v2 v2=v1 v3=v3]",
                "[v1=v2 v2=v3 v3=v1]",
                "[v1=v3 v2=v1 v3=v2]",
                "[v1=v3 v2=v2 v3=v1]"));
    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(true, mappings.remove(iter.next().toString()));
    assertEquals(true, mappings.remove(iter.next().toString()));
    assertEquals(false, iter.hasNext());

    /*
     *   1 ---> 2 <--- 3
     */
    DefaultDirectedGraph<Integer, DefaultEdge> g2 =
        new DefaultDirectedGraph<Integer, DefaultEdge>(DefaultEdge.class);

    g2.addVertex(1);
    g2.addVertex(2);
    g2.addVertex(3);

    g2.addEdge(1, 2);
    g2.addEdge(3, 2);

    VF2GraphIsomorphismInspector<Integer, DefaultEdge> vf3 =
        new VF2GraphIsomorphismInspector<Integer, DefaultEdge>(g2, g2);

    Iterator<GraphMapping<Integer, DefaultEdge>> iter2 = vf3.getMappings();

    Set<String> mappings2 = new HashSet<String>(Arrays.asList("[1=1 2=2 3=3]", "[1=3 2=2 3=1]"));
    assertEquals(true, mappings2.remove(iter2.next().toString()));
    assertEquals(true, mappings2.remove(iter2.next().toString()));
    assertEquals(false, iter2.hasNext());
  }
  @Test
  public void testSubgraph2() {

    ListenableUndirectedGraph<Integer, DefaultEdge> g1 =
        new ListenableUndirectedGraph<Integer, DefaultEdge>(DefaultEdge.class);

    g1.addVertex(0);
    g1.addVertex(1);
    g1.addVertex(2);
    g1.addVertex(3);
    g1.addVertex(4);

    g1.addEdge(0, 1);
    g1.addEdge(0, 4);
    g1.addEdge(1, 2);
    g1.addEdge(1, 4);
    g1.addEdge(2, 3);
    g1.addEdge(2, 4);
    g1.addEdge(3, 4);

    ListenableUndirectedGraph<Integer, DefaultEdge> g2 =
        new ListenableUndirectedGraph<Integer, DefaultEdge>(DefaultEdge.class);

    g2.addVertex(0);
    g2.addVertex(1);
    g2.addVertex(2);
    g2.addVertex(3);
    g2.addVertex(4);
    g2.addVertex(5);

    g2.addEdge(4, 2);
    g2.addEdge(2, 0);
    g2.addEdge(0, 1);
    g2.addEdge(1, 3);
    g2.addEdge(3, 4);
    g2.addEdge(4, 0);
    g2.addEdge(1, 4);

    ListenableUndirectedGraph<Integer, DefaultEdge> g3 =
        new ListenableUndirectedGraph<Integer, DefaultEdge>(DefaultEdge.class);

    g3.addVertex(0);
    g3.addVertex(1);
    g3.addVertex(2);
    g3.addVertex(3);
    g3.addVertex(4);
    g3.addVertex(5);

    g3.addEdge(0, 1);
    g3.addEdge(1, 2);
    g3.addEdge(2, 3);
    g3.addEdge(3, 4);
    g3.addEdge(5, 2);
    g3.addEdge(5, 3);
    g3.addEdge(5, 4);

    ListenableUndirectedGraph<Integer, DefaultEdge> g4 =
        new ListenableUndirectedGraph<Integer, DefaultEdge>(DefaultEdge.class);

    g4.addVertex(0);
    g4.addVertex(1);
    g4.addVertex(2);
    g4.addVertex(3);
    g4.addVertex(4);
    g4.addVertex(5);

    g4.addEdge(0, 1);
    g4.addEdge(1, 2);
    g4.addEdge(2, 3);
    g4.addEdge(4, 5);
    g4.addEdge(4, 2);
    g4.addEdge(5, 2);
    g4.addEdge(5, 3);

    VF2GraphIsomorphismInspector<Integer, DefaultEdge>
        vf2 = new VF2GraphIsomorphismInspector<Integer, DefaultEdge>(g2, g1),
        vf3 = new VF2GraphIsomorphismInspector<Integer, DefaultEdge>(g1, g2),
        vf4 = new VF2GraphIsomorphismInspector<Integer, DefaultEdge>(g3, g4);

    assertEquals(false, vf2.isomorphismExists());
    assertEquals(false, vf3.isomorphismExists());
    assertEquals(false, vf4.isomorphismExists());
  }