return new BikeFlagEncoder(configuration);
@Test public void testWrongEncoders() { try { FootFlagEncoder foot = new FootFlagEncoder(); new EncodingManager(foot, foot); assertTrue(false); } catch (Exception ex) { assertEquals("You must not register a FlagEncoder (foot) twice!", ex.getMessage()); } try { new EncodingManager(new FootFlagEncoder(), new CarFlagEncoder(), new BikeFlagEncoder(), new MountainBikeFlagEncoder(), new RacingBikeFlagEncoder()); assertTrue(false); } catch (Exception ex) { assertTrue(ex.getMessage(), ex.getMessage().startsWith("Encoders are requesting 44 bits, more than 32 bits of way flags. Decrease the")); } }
ReaderRelation osmRel = new ReaderRelation(1); BikeFlagEncoder defaultBike = new BikeFlagEncoder(); BikeFlagEncoder lessRelationCodes = new BikeFlagEncoder() { @Override public int defineRelationBits(int index, int shift) {
@Test public void testMultiplePreparationsIdenticalView() { CarFlagEncoder tmpCarEncoder = new CarFlagEncoder(); BikeFlagEncoder tmpBikeEncoder = new BikeFlagEncoder(); EncodingManager tmpEncodingManager = new EncodingManager(tmpCarEncoder, tmpBikeEncoder); // FastestWeighting would lead to different shortcuts due to different default speeds for bike and car Weighting carWeighting = new ShortestWeighting(tmpCarEncoder); Weighting bikeWeighting = new ShortestWeighting(tmpBikeEncoder); List<Weighting> chWeightings = Arrays.asList(carWeighting, bikeWeighting); GraphHopperStorage ghStorage = new GraphHopperStorage(chWeightings, dir, tmpEncodingManager, false, new GraphExtension.NoOpExtension()).create(1000); initShortcutsGraph(ghStorage); ghStorage.freeze(); for (Weighting w : chWeightings) { checkPath(ghStorage, w, 7, 5, IntArrayList.from(3, 9, 14, 16, 13, 12)); } }
@Test public void testMultiplePreparationsDifferentView() { CarFlagEncoder tmpCarEncoder = new CarFlagEncoder(); BikeFlagEncoder tmpBikeEncoder = new BikeFlagEncoder(); EncodingManager tmpEncodingManager = new EncodingManager(tmpCarEncoder, tmpBikeEncoder); Weighting carWeighting = new FastestWeighting(tmpCarEncoder); Weighting bikeWeighting = new FastestWeighting(tmpBikeEncoder); List<Weighting> chWeightings = Arrays.asList(carWeighting, bikeWeighting); GraphHopperStorage ghStorage = new GraphHopperStorage(chWeightings, dir, tmpEncodingManager, false, new GraphExtension.NoOpExtension()).create(1000); initShortcutsGraph(ghStorage); EdgeIteratorState edge = GHUtility.getEdge(ghStorage, 9, 14); edge.setFlags(tmpBikeEncoder.setAccess(edge.getFlags(), false, false)); ghStorage.freeze(); checkPath(ghStorage, carWeighting, 7, 5, IntArrayList.from(3, 9, 14, 16, 13, 12)); // detour around blocked 9,14 checkPath(ghStorage, bikeWeighting, 9, 5, IntArrayList.from(3, 10, 14, 16, 13, 12)); }
@Test public void testMixBikeTypesAndRelationCombination() { ReaderWay osmWay = new ReaderWay(1); osmWay.setTag("highway", "track"); osmWay.setTag("tracktype", "grade1"); ReaderRelation osmRel = new ReaderRelation(1); BikeFlagEncoder bikeEncoder = new BikeFlagEncoder(); MountainBikeFlagEncoder mtbEncoder = new MountainBikeFlagEncoder(); EncodingManager manager = new EncodingManager(bikeEncoder, mtbEncoder); // relation code for network rcn is VERY_NICE for bike and PREFER for mountainbike osmRel.setTag("route", "bicycle"); osmRel.setTag("network", "rcn"); long relFlags = manager.handleRelationTags(osmRel, 0); long allow = bikeEncoder.acceptBit | mtbEncoder.acceptBit; long flags = manager.handleWayTags(osmWay, allow, relFlags); // bike: uninfluenced speed for grade but via network => VERY_NICE // mtb: uninfluenced speed only PREFER assertTrue(bikeEncoder.getDouble(flags, PriorityWeighting.KEY) > mtbEncoder.getDouble(flags, PriorityWeighting.KEY)); }
@Test public void testTurnFlagEncoding_withCosts() { encoder = new BikeFlagEncoder(4, 2, 127); new EncodingManager(encoder); long flags_r0 = encoder.getTurnFlags(true, 0); long flags_0 = encoder.getTurnFlags(false, 0); assertTrue(Double.isInfinite(encoder.getTurnCost(flags_r0))); assertEquals(0, encoder.getTurnCost(flags_0), .1); assertTrue(encoder.isTurnRestricted(flags_r0)); assertFalse(encoder.isTurnRestricted(flags_0)); long flags_r20 = encoder.getTurnFlags(true, 0); long flags_20 = encoder.getTurnFlags(false, 20); assertTrue(Double.isInfinite(encoder.getTurnCost(flags_r20))); assertEquals(20, encoder.getTurnCost(flags_20), .1); assertTrue(encoder.isTurnRestricted(flags_r20)); assertFalse(encoder.isTurnRestricted(flags_20)); long flags_r220 = encoder.getTurnFlags(true, 0); try { encoder.getTurnFlags(false, 220); assertTrue(false); } catch (Exception ex) { } long flags_126 = encoder.getTurnFlags(false, 126); assertTrue(Double.isInfinite(encoder.getTurnCost(flags_r220))); assertEquals(126, encoder.getTurnCost(flags_126), .1); assertTrue(encoder.isTurnRestricted(flags_r220)); assertFalse(encoder.isTurnRestricted(flags_126)); }
@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)); }
@Test public void testMergeFlagsBeforeAdding() { FlagEncoder carEncoder = new CarFlagEncoder(5, 5, 3); FlagEncoder bikeEncoder = new BikeFlagEncoder(5, 5, 3); EncodingManager manager = new EncodingManager(carEncoder, bikeEncoder); GraphHopperStorage g = new GraphBuilder(manager).create(); initGraph(g); TurnCostExtension tcs = (TurnCostExtension) g.getExtension(); long carRestricted = carEncoder.getTurnFlags(true, 0); long bikeRestricted = bikeEncoder.getTurnFlags(true, 0); int edge23 = getEdge(g, 2, 3).getEdge(); int edge02 = getEdge(g, 0, 2).getEdge(); tcs.addTurnInfo(edge02, 2, edge23, carRestricted | bikeRestricted); long flags023 = tcs.getTurnCostFlags(edge02, 2, edge23); assertEquals(Double.POSITIVE_INFINITY, carEncoder.getTurnCost(flags023), 0); assertEquals(Double.POSITIVE_INFINITY, bikeEncoder.getTurnCost(flags023), 0); } }
@Test public void testSearchWithFilter_issue318() { CarFlagEncoder carEncoder = new CarFlagEncoder(); BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
@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(DefaultEdgeFilter.allEdges(carEncoder)); assertEquals(GHUtility.asSet(7, 2, 1), GHUtility.getNeighbors(carExplorer.setBaseNode(3))); EdgeExplorer bikeExplorer = g.createEdgeExplorer(DefaultEdgeFilter.allEdges(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()); }
public void testMultipleTurnCosts() { FlagEncoder carEncoder = new CarFlagEncoder(5, 5, 3); FlagEncoder bikeEncoder = new BikeFlagEncoder(5, 5, 3); EncodingManager manager = new EncodingManager(carEncoder, bikeEncoder); GraphHopperStorage g = new GraphBuilder(manager).create();
@Override public FlagEncoder createFlagEncoder( String name, PMap configuration ) { if (name.equals(CAR)) return new CarFlagEncoder(configuration); if (name.equals(BIKE)) return new BikeFlagEncoder(configuration); if (name.equals(BIKE2)) return new Bike2WeightFlagEncoder(configuration); if (name.equals(RACINGBIKE)) return new RacingBikeFlagEncoder(configuration); if (name.equals(MOUNTAINBIKE)) return new MountainBikeFlagEncoder(configuration); if (name.equals(FOOT)) return new FootFlagEncoder(configuration); if (name.equals(HIKE)) return new HikeFlagEncoder(configuration); if (name.equals(MOTORCYCLE)) return new MotorcycleFlagEncoder(configuration); throw new IllegalArgumentException("entry in encoder list not supported " + name); } }
return new BikeFlagEncoder(configuration);
return new BikeFlagEncoder(configuration);