### Question:
PrepareContractionHierarchies extends AbstractAlgoPreparation { public long getShortcuts() { return nodeContractor.getAddedShortcutsCount(); } private  PrepareContractionHierarchies(GraphHopperStorage ghStorage, CHProfile chProfile); static PrepareContractionHierarchies fromGraphHopperStorage(GraphHopperStorage ghStorage, CHProfile chProfile); PrepareContractionHierarchies setParams(PMap pMap); PrepareContractionHierarchies useFixedNodeOrdering(NodeOrderingProvider nodeOrderingProvider); @Override void doSpecificWork(); boolean isEdgeBased(); long getDijkstraCount(); long getShortcuts(); double getLazyTime(); double getPeriodTime(); double getNeighborTime(); Weighting getWeighting(); CHProfile getCHProfile(); long getTotalPrepareTime(); @Override String toString(); RoutingAlgorithmFactory getRoutingAlgorithmFactory();  }### Answer:
@Test public void testCircleBug() { g.edge(0, 1, 10, true); g.edge(0, 1, 4, true); g.edge(0, 2, 10, true); g.edge(0, 3, 10, true); PrepareContractionHierarchies prepare = createPrepareContractionHierarchies(g); prepare.doWork(); assertEquals(0, prepare.getShortcuts()); }
@Test public void testBug178() { g.edge(1, 2, 1, false); g.edge(2, 1, 1, false); g.edge(5, 0, 1, true); g.edge(5, 6, 1, true); g.edge(0, 1, 1, true); g.edge(2, 3, 1, true); g.edge(3, 4, 1, true); g.edge(6, 3, 1, true); PrepareContractionHierarchies prepare = createPrepareContractionHierarchies(g); prepare.doWork(); assertEquals(2, prepare.getShortcuts()); }