@Test public void blossom() throws Exception {

    Graph g = Graph.fromSmiles("CCCCCC1CCCC1CC");
    Matching m = Matching.empty(g);
    // initial matching from double-bonds (size = 5) 
    m.match(1, 2);
    m.match(3, 4);
    m.match(5, 6);
    m.match(7, 8);
    m.match(9, 10);
    MaximumMatching.maximise(g, m, 10);
    // once maximised the matching has been augmented such that there
    // are now six disjoint edges (only possibly by contracting blossom)
    assertThat(m.matches(),
               IsIterableWithSize.<Tuple>iterableWithSize(6));
    assertThat(m.matches(),
               hasItems(Tuple.of(0, 1),
                        Tuple.of(2, 3),
                        Tuple.of(4, 5),
                        Tuple.of(6, 7),
                        Tuple.of(8, 9),
                        Tuple.of(10, 11)));
}