/* * Licensed to GraphHopper GmbH under one or more contributor * license agreements. See the NOTICE file distributed with this work for * additional information regarding copyright ownership. * * GraphHopper GmbH licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.graphhopper.routing.util; import com.graphhopper.reader.ReaderWay; import com.graphhopper.storage.*; import com.graphhopper.util.*; import org.junit.Test; import static org.junit.Assert.*; /** * @author Peter Karich */ public class Bike2WeightFlagEncoderTest extends BikeFlagEncoderTest { private final EncodingManager em = new EncodingManager("bike,bike2"); @Override protected BikeCommonFlagEncoder createBikeEncoder() { return (BikeCommonFlagEncoder) em.getEncoder("bike2"); } private Graph initExampleGraph() { GraphHopperStorage gs = new GraphHopperStorage(new RAMDirectory(), em, true, new GraphExtension.NoOpExtension()).create(1000); NodeAccess na = gs.getNodeAccess(); // 50--(0.0001)-->49--(0.0004)-->55--(0.0005)-->60 na.setNode(0, 51.1, 12.001, 50); na.setNode(1, 51.1, 12.002, 60); EdgeIteratorState edge = gs.edge(0, 1). setWayGeometry(Helper.createPointList3D(51.1, 12.0011, 49, 51.1, 12.0015, 55)); edge.setDistance(100); edge.setFlags(encoder.setReverseSpeed(encoder.setProperties(10, true, true), 15)); return gs; } @Test public void testApplyWayTags() { Graph graph = initExampleGraph(); EdgeIteratorState edge = GHUtility.getEdge(graph, 0, 1); ReaderWay way = new ReaderWay(1); encoder.applyWayTags(way, edge); long flags = edge.getFlags(); // decrease speed assertEquals(2, encoder.getSpeed(flags), 1e-1); // increase speed but use maximum speed (calculated was 24) assertEquals(18, encoder.getReverseSpeed(flags), 1e-1); } @Test public void testUnchangedForStepsBridgeAndTunnel() { Graph graph = initExampleGraph(); EdgeIteratorState edge = GHUtility.getEdge(graph, 0, 1); long oldFlags = edge.getFlags(); ReaderWay way = new ReaderWay(1); way.setTag("highway", "steps"); encoder.applyWayTags(way, edge); assertEquals(oldFlags, edge.getFlags()); } @Test public void testSetSpeed0_issue367() { long flags = encoder.setProperties(10, true, true); flags = encoder.setSpeed(flags, 0); assertEquals(0, encoder.getSpeed(flags), .1); assertEquals(10, encoder.getReverseSpeed(flags), .1); assertFalse(encoder.isForward(flags)); assertTrue(encoder.isBackward(flags)); } @Test public void testRoutingFailsWithInvalidGraph_issue665() { GraphHopperStorage graph = new GraphHopperStorage( new RAMDirectory(), em, true, new GraphExtension.NoOpExtension()); graph.create(100); ReaderWay way = new ReaderWay(0); way.setTag("route", "ferry"); long includeWay = em.acceptWay(way); long relationFlags = 0; long wayFlags = em.handleWayTags(way, includeWay, relationFlags); graph.edge(0, 1).setDistance(247).setFlags(wayFlags); assertTrue(isGraphValid(graph, encoder)); } private boolean isGraphValid(Graph graph, FlagEncoder encoder) { EdgeExplorer explorer = graph.createEdgeExplorer(); // iterator at node 0 considers the edge 0-1 to be undirected EdgeIterator iter0 = explorer.setBaseNode(0); iter0.next(); boolean iter0flag = iter0.getBaseNode() == 0 && iter0.getAdjNode() == 1 && iter0.isForward(encoder) && iter0.isBackward(encoder); // iterator at node 1 considers the edge 1-0 to be directed EdgeIterator iter1 = explorer.setBaseNode(1); iter1.next(); boolean iter1flag = iter1.getBaseNode() == 1 && iter1.getAdjNode() == 0 && iter1.isForward(encoder) && iter1.isBackward(encoder); return iter0flag && iter1flag; } }