@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()); }