@Test public void kekuleBenzene() throws Exception {

    Graph g = new Graph(6);
    g.addAtom(AtomImpl.AliphaticSubset.Carbon);
    g.addAtom(AtomImpl.AliphaticSubset.Carbon);
    g.addAtom(AtomImpl.AliphaticSubset.Carbon);
    g.addAtom(AtomImpl.AliphaticSubset.Carbon);
    g.addAtom(AtomImpl.AliphaticSubset.Carbon);
    g.addAtom(AtomImpl.AliphaticSubset.Carbon);
    g.addEdge(new Edge(0, 1, IMPLICIT));
    g.addEdge(new Edge(1, 2, DOUBLE));
    g.addEdge(new Edge(2, 3, IMPLICIT));
    g.addEdge(new Edge(3, 4, DOUBLE));
    g.addEdge(new Edge(4, 5, IMPLICIT));
    g.addEdge(new Edge(5, 0, DOUBLE));
    Graph h = new ImplicitToExplicit().apply(g);
    Assert.assertThat(g, CoreMatchers.is(CoreMatchers.not(CoreMatchers
                                                                  .sameInstance(h))));
    Assert.assertThat(h.edges(0), CoreMatchers
            .hasItems(new Edge(0, 1, SINGLE),
                      new Edge(0, 5, DOUBLE)));
    Assert.assertThat(h.edges(1), CoreMatchers
            .hasItems(new Edge(1, 0, SINGLE),
                      new Edge(1, 2, DOUBLE)));
    Assert.assertThat(h.edges(2), CoreMatchers
            .hasItems(new Edge(2, 1, DOUBLE),
                      new Edge(2, 3, SINGLE)));
    Assert.assertThat(h.edges(3), CoreMatchers
            .hasItems(new Edge(3, 2, SINGLE),
                      new Edge(3, 4, DOUBLE)));
    Assert.assertThat(h.edges(4), CoreMatchers
            .hasItems(new Edge(4, 3, DOUBLE),
                      new Edge(4, 5, SINGLE)));
    Assert.assertThat(h.edges(5), CoreMatchers
            .hasItems(new Edge(5, 0, DOUBLE),
                      new Edge(5, 4, SINGLE)));
}