@Test public void testFindSubnetworks() { GraphHopperStorage g = createSubnetworkTestStorage(); PrepEdgeFilter filter = new PrepEdgeFilter(carFlagEncoder); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, Collections.singletonList(carFlagEncoder)); List<IntArrayList> components = instance.findSubnetworks(filter); assertEquals(3, components.size()); // start is at 0 => large network assertEquals(IntArrayList.from(0, 7, 3, 13, 5), components.get(0)); // next smallest and unvisited node is 1 => big network assertEquals(IntArrayList.from(1, 8, 4, 2, 11, 12, 9, 15), components.get(1)); assertEquals(IntArrayList.from(6, 14, 10), components.get(2)); }
@Test public void testTarjan() { GraphHopperStorage g = createSubnetworkTestStorage(); // Requires a single vehicle type, otherwise we throw. final EdgeFilter filter = DefaultEdgeFilter.outEdges(carFlagEncoder); TarjansSCCAlgorithm tarjan = new TarjansSCCAlgorithm(g, filter, false); List<IntArrayList> components = tarjan.findComponents(); assertEquals(4, components.size()); assertEquals(IntArrayList.from(13, 5, 3, 7, 0), components.get(0)); assertEquals(IntArrayList.from(2, 4, 12, 11, 8, 1), components.get(1)); assertEquals(IntArrayList.from(10, 14, 6), components.get(2)); assertEquals(IntArrayList.from(15, 9), components.get(3)); }
@Test public void testKeepLargestNetworks() { GraphHopperStorage g = createSubnetworkTestStorage(); PrepEdgeFilter filter = new PrepEdgeFilter(carFlagEncoder); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, Collections.singletonList(carFlagEncoder)); List<IntArrayList> components = instance.findSubnetworks(filter); assertEquals(3, components.size()); int removedEdges = instance.keepLargeNetworks(filter, components); assertEquals(8, removedEdges); instance.markNodesRemovedIfUnreachable(); g.optimize(); assertEquals(8, g.getNodes()); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(g)); components = instance.findSubnetworks(filter); assertEquals(1, components.size()); }