use of com.graphhopper.storage.GraphHopperStorage in project graphhopper by graphhopper.
the class PrepareRoutingSubnetworksTest method testKeepLargestNetworks.
@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());
}
use of com.graphhopper.storage.GraphHopperStorage in project graphhopper by graphhopper.
the class PrepareRoutingSubnetworksTest method testRemoveNode.
@Test
public void testRemoveNode() {
FlagEncoder carEncoder = new CarFlagEncoder();
BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
EncodingManager em2 = new EncodingManager(carEncoder, bikeEncoder);
GraphHopperStorage g = createSubnetworkTestStorage2(em2);
PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders());
EdgeExplorer edgeExplorer = g.createEdgeExplorer();
assertFalse(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 4));
assertFalse(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 5));
assertFalse(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 6));
// mark certain edges inaccessible for all encoders
for (EdgeIteratorState edge : Arrays.asList(GHUtility.getEdge(g, 5, 6), GHUtility.getEdge(g, 4, 5), GHUtility.getEdge(g, 4, 6))) {
for (FlagEncoder encoders : em2.fetchEdgeEncoders()) {
edge.setFlags(encoders.setAccess(0, false, false));
}
}
assertTrue(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 4));
assertTrue(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 5));
assertTrue(instance.detectNodeRemovedForAllEncoders(edgeExplorer, 6));
}
use of com.graphhopper.storage.GraphHopperStorage in project graphhopper by graphhopper.
the class PrepareRoutingSubnetworksTest method testNodeOrderingRegression.
// Previous two-pass implementation failed on 1 -> 2 -> 0
@Test
public void testNodeOrderingRegression() {
// 1 -> 2 -> 0
GraphHopperStorage g = createStorage(em);
g.edge(1, 2, 1, false);
g.edge(2, 0, 1, false);
PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, Collections.singletonList(carFlagEncoder)).setMinOneWayNetworkSize(2);
int removedEdges = instance.removeDeadEndUnvisitedNetworks(new PrepEdgeFilter(carFlagEncoder));
assertEquals(2, removedEdges);
}
use of com.graphhopper.storage.GraphHopperStorage in project graphhopper by graphhopper.
the class PrepareRoutingSubnetworksTest method testTarjan.
@Test
public void testTarjan() {
GraphHopperStorage g = createSubnetworkTestStorage();
// Requires a single vehicle type, otherwise we throw.
final EdgeFilter filter = new DefaultEdgeFilter(carFlagEncoder, false, true);
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));
}
use of com.graphhopper.storage.GraphHopperStorage in project graphhopper by graphhopper.
the class PrepareRoutingSubnetworksTest method testRemoveSubnetworkWhenMultipleVehicles.
@Test
public void testRemoveSubnetworkWhenMultipleVehicles() {
FlagEncoder carEncoder = new CarFlagEncoder();
BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
EncodingManager em2 = new EncodingManager(carEncoder, bikeEncoder);
GraphHopperStorage g = createSubnetworkTestStorage2(em2);
GHUtility.getEdge(g, 3, 4).setFlags(carEncoder.setProperties(10, false, false) | bikeEncoder.setProperties(5, true, true));
PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders());
instance.setMinNetworkSize(5);
instance.doWork();
g.optimize();
// remove nothing because of two vehicles with different subnetworks
assertEquals(9, g.getNodes());
EdgeExplorer carExplorer = g.createEdgeExplorer(new DefaultEdgeFilter(carEncoder));
assertEquals(GHUtility.asSet(7, 2, 1), GHUtility.getNeighbors(carExplorer.setBaseNode(3)));
EdgeExplorer bikeExplorer = g.createEdgeExplorer(new DefaultEdgeFilter(bikeEncoder));
assertEquals(GHUtility.asSet(7, 2, 1, 4), GHUtility.getNeighbors(bikeExplorer.setBaseNode(3)));
GHUtility.getEdge(g, 3, 4).setFlags(carEncoder.setProperties(10, false, false) | bikeEncoder.setProperties(5, false, false));
instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders());
instance.setMinNetworkSize(5);
instance.doWork();
g.optimize();
assertEquals(6, g.getNodes());
}
Aggregations