@Test
  public void testFindShortcuts_Roundabout() {
    LevelGraphStorage g = (LevelGraphStorage) createGraph();
    EdgeSkipIterator iter1_1 = g.edge(1, 3, 1, true);
    EdgeSkipIterator iter1_2 = g.edge(3, 4, 1, true);
    EdgeSkipIterator iter2_1 = g.edge(4, 5, 1, false);
    EdgeSkipIterator iter2_2 = g.edge(5, 6, 1, false);
    EdgeSkipIterator iter3_1 = g.edge(6, 7, 1, true);
    EdgeSkipIterator iter3_2 = g.edge(6, 8, 2, false);
    g.edge(8, 4, 1, false);
    g.setLevel(3, 3);
    g.setLevel(5, 5);
    g.setLevel(7, 7);
    g.setLevel(8, 8);

    PrepareContractionHierarchies prepare = new PrepareContractionHierarchies().graph(g);
    g.edge(1, 4, 2, prepare.scBothDir()).skippedEdges(iter1_1.edge(), iter1_2.edge());
    int f = prepare.scOneDir();
    g.edge(4, 6, 2, f).skippedEdges(iter2_1.edge(), iter2_2.edge());
    g.edge(6, 4, 3, f).skippedEdges(iter3_1.edge(), iter3_2.edge());

    prepare.initFromGraph();
    // there should be two different shortcuts for both directions!
    Collection<Shortcut> sc = prepare.testFindShortcuts(4);
    assertEquals(2, sc.size());
  }
  @Test
  public void testDirectedGraph3() {
    LevelGraph g = createGraph();
    g.edge(0, 2, 2, true);
    g.edge(10, 2, 2, true);
    g.edge(11, 2, 2, true);
    // create a longer one directional edge => no longish one-dir shortcut should be created
    g.edge(2, 1, 2, true);
    g.edge(2, 1, 10, false);

    g.edge(1, 3, 2, true);
    g.edge(3, 4, 2, true);
    g.edge(3, 5, 2, true);
    g.edge(3, 6, 2, true);
    g.edge(3, 7, 2, true);

    PrepareContractionHierarchies prepare = new PrepareContractionHierarchies().graph(g);
    prepare.initFromGraph();
    // find all shortcuts if we contract node 1
    Collection<Shortcut> scs = prepare.testFindShortcuts(1);
    assertEquals(2, scs.size());
    Iterator<Shortcut> iter = scs.iterator();
    Shortcut sc1 = iter.next();
    Shortcut sc2 = iter.next();
    if (sc1.distance > sc2.distance) {
      Shortcut tmp = sc1;
      sc1 = sc2;
      sc2 = tmp;
    }

    assertTrue(sc1.toString(), sc1.from == 2 && sc1.to == 3);
    assertTrue(sc2.toString(), sc2.from == 2 && sc2.to == 3);

    assertEquals(sc1.toString(), 4, sc1.distance, 1e-4);
    assertEquals(sc2.toString(), 12, sc2.distance, 1e-4);
  }