@Test public void testCopy() { Graph g = initUnsorted(createGraph()); EdgeIteratorState eb = g.edge(6, 5, 11, true); eb.setWayGeometry(Helper.createPointList(12, 10, -1, 3)); LevelGraph lg = new GraphBuilder(encodingManager).levelGraphCreate(); GHUtility.copyTo(g, lg); eb = lg.getEdgeProps(eb.getEdge(), 6); assertEquals(Helper.createPointList(-1, 3, 12, 10), eb.getWayGeometry()); assertEquals(0, lg.getLevel(0)); assertEquals(0, lg.getLevel(1)); assertEquals(0, lg.getLatitude(0), 1e-6); assertEquals(1, lg.getLongitude(0), 1e-6); assertEquals(2.5, lg.getLatitude(1), 1e-6); assertEquals(4.5, lg.getLongitude(1), 1e-6); assertEquals(9, lg.getNodes()); EdgeIterator iter = lg.createEdgeExplorer().setBaseNode(8); iter.next(); assertEquals(2.05, iter.getDistance(), 1e-6); assertEquals("11", BitUtil.toBitString(iter.getFlags(), 2)); iter.next(); assertEquals(0.5, iter.getDistance(), 1e-6); assertEquals("11", BitUtil.toBitString(iter.getFlags(), 2)); iter = lg.createEdgeExplorer().setBaseNode(7); iter.next(); assertEquals(2.1, iter.getDistance(), 1e-6); assertEquals("01", BitUtil.toBitString(iter.getFlags(), 2)); assertTrue(iter.next()); assertEquals(0.7, iter.getDistance(), 1e-6); }
@Test public void testCopyTo() { graph = createGraph(); initExampleGraph(graph); GraphStorage gs = newRAMGraph(); gs.setSegmentSize(8000); gs.create(10); try { graph.copyTo(gs); checkExampleGraph(gs); } catch (Exception ex) { ex.printStackTrace(); assertTrue(ex.toString(), false); } try { Helper.close((Closeable) graph); graph = createGraph(); gs.copyTo(graph); checkExampleGraph(graph); } catch (Exception ex) { ex.printStackTrace(); assertTrue(ex.toString(), false); } Helper.close((Closeable) graph); }
@Test public void testEnabledElevation() { graph = createGraph(defaultGraphLoc, true); NodeAccess na = graph.getNodeAccess(); assertTrue(na.is3D()); na.setNode(0, 10, 20, -10); na.setNode(1, 11, 2, 100); assertEquals(-10, na.getEle(0), 1e-1); assertEquals(100, na.getEle(1), 1e-1); graph.edge(0, 1).setWayGeometry(Helper.createPointList3D(10, 27, 72, 11, 20, 1)); assertEquals( Helper.createPointList3D(10, 27, 72, 11, 20, 1), GHUtility.getEdge(graph, 0, 1).fetchWayGeometry(0)); assertEquals( Helper.createPointList3D(10, 20, -10, 10, 27, 72, 11, 20, 1, 11, 2, 100), GHUtility.getEdge(graph, 0, 1).fetchWayGeometry(3)); assertEquals( Helper.createPointList3D(11, 2, 100, 11, 20, 1, 10, 27, 72, 10, 20, -10), GHUtility.getEdge(graph, 1, 0).fetchWayGeometry(3)); }
@Test public void testCopyProperties() { graph = createGraph(); EdgeIteratorState edge = graph.edge(1, 3, 10, false).setName("testing").setWayGeometry(Helper.createPointList(1, 2)); EdgeIteratorState newEdge = graph.edge(1, 3, 10, false); edge.copyPropertiesTo(newEdge); assertEquals(edge.getName(), newEdge.getName()); assertEquals(edge.getDistance(), newEdge.getDistance(), 1e-7); assertEquals(edge.getFlags(), newEdge.getFlags()); assertEquals(edge.fetchWayGeometry(0), newEdge.fetchWayGeometry(0)); }
@Test public void testSave_and_fileFormat() throws IOException { graph = newGHStorage(new RAMDirectory(defaultGraphLoc, true), true).create(defaultSize); NodeAccess na = graph.getNodeAccess(); assertTrue(na.is3D()); na.setNode(0, 10, 10, 0); na.setNode(1, 11, 20, 1); na.setNode(2, 12, 12, 0.4); EdgeIteratorState iter2 = graph.edge(0, 1, 100, true); iter2.setWayGeometry(Helper.createPointList3D(1.5, 1, 0, 2, 3, 0)); EdgeIteratorState iter1 = graph.edge(0, 2, 200, true); iter1.setWayGeometry(Helper.createPointList3D(3.5, 4.5, 0, 5, 6, 0)); graph.edge(9, 10, 200, true); graph.edge(9, 11, 200, true); graph.edge(1, 2, 120, false); iter1.setName("named street1"); iter2.setName("named street2"); checkGraph(graph); graph.flush(); graph.close(); graph = newGHStorage(new MMapDirectory(defaultGraphLoc), true); assertTrue(graph.loadExisting()); assertEquals(12, graph.getNodes()); checkGraph(graph); assertEquals( "named street1", graph.getEdgeIteratorState(iter1.getEdge(), iter1.getAdjNode()).getName()); assertEquals( "named street2", graph.getEdgeIteratorState(iter2.getEdge(), iter2.getAdjNode()).getName()); graph.edge(3, 4, 123, true).setWayGeometry(Helper.createPointList3D(4.4, 5.5, 0, 6.6, 7.7, 0)); checkGraph(graph); }
@Test public void testDetachEdge() { graph = createGraph(); graph.edge(0, 1, 2, true); long flags = carEncoder.setProperties(10, true, false); graph.edge(0, 2, 2, true).setWayGeometry(Helper.createPointList(1, 2, 3, 4)).setFlags(flags); graph.edge(1, 2, 2, true); EdgeIterator iter = graph.createEdgeExplorer().setBaseNode(0); try { // currently not possible to detach without next, without introducing a new property inside // EdgeIterable iter.detach(false); assertTrue(false); } catch (Exception ex) { } iter.next(); EdgeIteratorState edgeState2 = iter.detach(false); assertEquals(2, iter.getAdjNode()); assertEquals(1, edgeState2.fetchWayGeometry(0).getLatitude(0), 1e-1); assertEquals(2, edgeState2.getAdjNode()); assertTrue(carEncoder.isBool(edgeState2.getFlags(), FlagEncoder.K_FORWARD)); EdgeIteratorState edgeState3 = iter.detach(true); assertEquals(0, edgeState3.getAdjNode()); assertEquals(2, edgeState3.getBaseNode()); assertEquals(3, edgeState3.fetchWayGeometry(0).getLatitude(0), 1e-1); assertFalse(carEncoder.isBool(edgeState3.getFlags(), FlagEncoder.K_FORWARD)); assertEquals(GHUtility.getEdge(graph, 0, 2).getFlags(), edgeState2.getFlags()); assertEquals(GHUtility.getEdge(graph, 2, 0).getFlags(), edgeState3.getFlags()); iter.next(); assertEquals(1, iter.getAdjNode()); assertEquals(2, edgeState2.getAdjNode()); assertEquals(2, edgeState3.getBaseNode()); assertEquals(0, iter.fetchWayGeometry(0).size()); assertEquals(1, edgeState2.fetchWayGeometry(0).getLatitude(0), 1e-1); assertEquals(3, edgeState3.fetchWayGeometry(0).getLatitude(0), 1e-1); // #162 a directed self referencing edge should be able to reverse its state too graph.edge(3, 3, 2, true).setFlags(flags); EdgeIterator iter2 = graph.createEdgeExplorer().setBaseNode(3); iter2.next(); assertEquals(edgeState2.getFlags(), iter2.detach(false).getFlags()); assertEquals(edgeState3.getFlags(), iter2.detach(true).getFlags()); }
@Test public void testGetLocations() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(0, 12, 23); na.setNode(1, 22, 23); assertEquals(2, graph.getNodes()); graph.edge(0, 1, 10, true); assertEquals(2, graph.getNodes()); graph.edge(0, 2, 10, true); assertEquals(3, graph.getNodes()); Helper.close((Closeable) graph); graph = createGraph(); assertEquals(0, graph.getNodes()); }
@Test public void testClone() { graph = createGraph(); graph.edge(1, 2, 10, true); NodeAccess na = graph.getNodeAccess(); na.setNode(0, 12, 23); na.setNode(1, 8, 13); na.setNode(2, 2, 10); na.setNode(3, 5, 9); graph.edge(1, 3, 10, true); Graph clone = graph.copyTo(createGraph(locationParent + "/clone", false)); assertEquals(graph.getNodes(), clone.getNodes()); assertEquals( count(carOutExplorer.setBaseNode(1)), count(clone.createEdgeExplorer(carOutFilter).setBaseNode(1))); clone.edge(1, 4, 10, true); assertEquals(3, count(clone.createEdgeExplorer(carOutFilter).setBaseNode(1))); assertEquals(graph.getBounds(), clone.getBounds()); Helper.close((Closeable) clone); }
protected void checkGraph(Graph g) { NodeAccess na = g.getNodeAccess(); assertTrue(na.is3D()); assertTrue(g.getBounds().isValid()); assertEquals(new BBox(10, 20, 10, 12, 0, 1), g.getBounds()); assertEquals(10, na.getLatitude(0), 1e-2); assertEquals(10, na.getLongitude(0), 1e-2); EdgeExplorer explorer = g.createEdgeExplorer(carOutFilter); assertEquals(2, GHUtility.count(explorer.setBaseNode(0))); assertEquals(GHUtility.asSet(2, 1), GHUtility.getNeighbors(explorer.setBaseNode(0))); EdgeIterator iter = explorer.setBaseNode(0); assertTrue(iter.next()); assertEquals(Helper.createPointList3D(3.5, 4.5, 0, 5, 6, 0), iter.fetchWayGeometry(0)); assertTrue(iter.next()); assertEquals(Helper.createPointList3D(1.5, 1, 0, 2, 3, 0), iter.fetchWayGeometry(0)); assertEquals(Helper.createPointList3D(10, 10, 0, 1.5, 1, 0, 2, 3, 0), iter.fetchWayGeometry(1)); assertEquals(Helper.createPointList3D(1.5, 1, 0, 2, 3, 0, 11, 20, 1), iter.fetchWayGeometry(2)); assertEquals(11, na.getLatitude(1), 1e-2); assertEquals(20, na.getLongitude(1), 1e-2); assertEquals(2, GHUtility.count(explorer.setBaseNode(1))); assertEquals(GHUtility.asSet(2, 0), GHUtility.getNeighbors(explorer.setBaseNode(1))); assertEquals(12, na.getLatitude(2), 1e-2); assertEquals(12, na.getLongitude(2), 1e-2); assertEquals(1, GHUtility.count(explorer.setBaseNode(2))); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(2))); EdgeIteratorState eib = GHUtility.getEdge(g, 1, 2); assertEquals(Helper.createPointList3D(), eib.fetchWayGeometry(0)); assertEquals(Helper.createPointList3D(11, 20, 1), eib.fetchWayGeometry(1)); assertEquals(Helper.createPointList3D(12, 12, 0.4), eib.fetchWayGeometry(2)); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(2))); }
@Test public void testMonacoWithInstructions() { String osmFile = "files/monaco.osm.gz"; String graphFile = "target/graph-monaco"; String vehicle = "FOOT"; String importVehicles = "FOOT"; String weightCalcStr = "shortest"; try { // make sure we are using fresh graphhopper files with correct vehicle Helper.removeDir(new File(graphFile)); GraphHopper hopper = new GraphHopper() .setInMemory(true) .setOSMFile(osmFile) .disableCHShortcuts() .setGraphHopperLocation(graphFile) .setEncodingManager(new EncodingManager(importVehicles)) .importOrLoad(); Graph g = hopper.getGraph(); GHResponse rsp = hopper.route( new GHRequest(43.727687, 7.418737, 43.74958, 7.436566) .setAlgorithm("astar") .setVehicle(vehicle) .setWeighting(weightCalcStr)); assertEquals(3437.6, rsp.getDistance(), .1); assertEquals(87, rsp.getPoints().getSize()); InstructionList il = rsp.getInstructions(); assertEquals(13, il.size()); Translation tr = trMap.getWithFallBack(Locale.US); List<String> iList = il.createDescription(tr); // TODO roundabout fine tuning -> enter + leave roundabout (+ two rounabouts -> is it // necessary if we do not leave the street?) assertEquals("Continue onto Avenue des Guelfes", iList.get(0)); assertEquals("Turn slight left onto Avenue des Papalins", iList.get(1)); assertEquals("Turn sharp right onto Quai Jean-Charles Rey", iList.get(2)); assertEquals("Turn left onto road", iList.get(3)); assertEquals("Turn right onto Avenue Albert II", iList.get(4)); List<Double> dists = il.createDistances(); assertEquals(11, dists.get(0), 1); assertEquals(289, dists.get(1), 1); assertEquals(10, dists.get(2), 1); assertEquals(43, dists.get(3), 1); assertEquals(122, dists.get(4), 1); assertEquals(447, dists.get(5), 1); List<Long> times = il.createMillis(); assertEquals(7, times.get(0) / 1000); assertEquals(207, times.get(1) / 1000); assertEquals(7, times.get(2) / 1000); assertEquals(30, times.get(3) / 1000); assertEquals(87, times.get(4) / 1000); assertEquals(321, times.get(5) / 1000); List<GPXEntry> list = rsp.getInstructions().createGPXList(); assertEquals(123, list.size()); final long lastEntryMillis = list.get(list.size() - 1).getMillis(); final long totalResponseMillis = rsp.getMillis(); assertEquals(totalResponseMillis, lastEntryMillis); } catch (Exception ex) { throw new RuntimeException("cannot handle osm file " + osmFile, ex); } finally { Helper.removeDir(new File(graphFile)); } }
@Test public void testMonitor() throws Exception { String addr = "tcp://127.0.0.1:5590"; SocketMonitor[] threads = new SocketMonitor[3]; // Create the infrastructure Ctx ctx = ZMQ.zmq_init(1); assert (ctx != null); // set socket monitor SocketBase rep = ZMQ.zmq_socket(ctx, ZMQ.ZMQ_REP); assert (rep != null); try { ZMQ.zmq_socket_monitor(rep, addr, 0); assertTrue(false); } catch (IllegalArgumentException e) { } // REP socket monitor, all events boolean rc = ZMQ.zmq_socket_monitor(rep, "inproc://monitor.rep", ZMQ.ZMQ_EVENT_ALL); assertEquals(true, rc); threads[0] = new SocketMonitor(ctx, "inproc://monitor.rep"); threads[0].start(); rc = ZMQ.zmq_bind(rep, addr); assert (rc); SocketBase req = ZMQ.zmq_socket(ctx, ZMQ.ZMQ_REQ); assert (req != null); // REQ socket monitor, all events rc = ZMQ.zmq_socket_monitor(req, "inproc://monitor.req", ZMQ.ZMQ_EVENT_ALL); assertEquals(true, rc); threads[1] = new SocketMonitor(ctx, "inproc://monitor.req"); threads[1].start(); rc = ZMQ.zmq_connect(req, addr); assert (rc); // 2nd REQ socket SocketBase req2 = ZMQ.zmq_socket(ctx, ZMQ.ZMQ_REQ); assert (req2 != null); // 2nd REQ socket monitor, connected event only rc = ZMQ.zmq_socket_monitor(req2, "inproc://monitor.req2", ZMQ.ZMQ_EVENT_CONNECTED); assertEquals(true, rc); threads[2] = new SocketMonitor(ctx, "inproc://monitor.req2"); threads[2].start(); rc = ZMQ.zmq_connect(req2, addr); assert (rc); Helper.bounce(rep, req); // Allow a window for socket events as connect can be async ZMQ.zmq_sleep(1); // Close the REP socket ZMQ.zmq_close(rep); // Allow some time for detecting error states ZMQ.zmq_sleep(1); // Close the REQ socket ZMQ.zmq_close(req); // Close the 2nd REQ socket ZMQ.zmq_close(req2); // Allow for closed or disconnected events to bubble up ZMQ.zmq_sleep(1); ZMQ.zmq_term(ctx); // Expected REP socket events // We expect to at least observe these events assertTrue((threads[0].events & ZMQ.ZMQ_EVENT_LISTENING) > 0); assertTrue((threads[0].events & ZMQ.ZMQ_EVENT_ACCEPTED) > 0); assertTrue((threads[0].events & ZMQ.ZMQ_EVENT_CLOSED) > 0); // Expected REQ socket events assertTrue((threads[1].events & ZMQ.ZMQ_EVENT_CONNECTED) > 0); assertTrue((threads[1].events & ZMQ.ZMQ_EVENT_DISCONNECTED) > 0); assertTrue((threads[1].events & ZMQ.ZMQ_EVENT_CLOSED) > 0); // Expected 2nd REQ socket events assertTrue((threads[2].events & ZMQ.ZMQ_EVENT_CONNECTED) > 0); assertTrue((threads[2].events & ZMQ.ZMQ_EVENT_CLOSED) == 0); threads[0].join(); threads[1].join(); threads[2].join(); }
@Test public void testPillarNodes() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(0, 0.01, 0.01); na.setNode(4, 0.4, 0.4); na.setNode(14, 0.14, 0.14); na.setNode(10, 0.99, 0.99); PointList pointList = Helper.createPointList(1, 1, 1, 2, 1, 3); graph .edge(0, 4) .setDistance(100) .setFlags(carEncoder.setProperties(10, true, false)) .setWayGeometry(pointList); pointList = Helper.createPointList(1, 5, 1, 6, 1, 7, 1, 8, 1, 9); graph .edge(4, 10) .setDistance(100) .setFlags(carEncoder.setProperties(10, true, false)) .setWayGeometry(pointList); pointList = Helper.createPointList(1, 13, 1, 12, 1, 11); graph .edge(14, 0) .setDistance(100) .setFlags(carEncoder.setProperties(10, true, false)) .setWayGeometry(pointList); EdgeIterator iter = carAllExplorer.setBaseNode(0); assertTrue(iter.next()); assertEquals(14, iter.getAdjNode()); assertPList(Helper.createPointList(1, 11, 1, 12, 1, 13.0), iter.fetchWayGeometry(0)); assertPList( Helper.createPointList(0.01, 0.01, 1, 11, 1, 12, 1, 13.0), iter.fetchWayGeometry(1)); assertPList( Helper.createPointList(1, 11, 1, 12, 1, 13.0, 0.14, 0.14), iter.fetchWayGeometry(2)); assertPList( Helper.createPointList(0.01, 0.01, 1, 11, 1, 12, 1, 13.0, 0.14, 0.14), iter.fetchWayGeometry(3)); assertTrue(iter.next()); assertEquals(4, iter.getAdjNode()); assertPList(Helper.createPointList(1, 1, 1, 2, 1, 3), iter.fetchWayGeometry(0)); assertPList(Helper.createPointList(0.01, 0.01, 1, 1, 1, 2, 1, 3), iter.fetchWayGeometry(1)); assertPList(Helper.createPointList(1, 1, 1, 2, 1, 3, 0.4, 0.4), iter.fetchWayGeometry(2)); assertPList( Helper.createPointList(0.01, 0.01, 1, 1, 1, 2, 1, 3, 0.4, 0.4), iter.fetchWayGeometry(3)); assertFalse(iter.next()); iter = carOutExplorer.setBaseNode(0); assertTrue(iter.next()); assertEquals(4, iter.getAdjNode()); assertPList(Helper.createPointList(1, 1, 1, 2, 1, 3), iter.fetchWayGeometry(0)); assertFalse(iter.next()); iter = carInExplorer.setBaseNode(10); assertTrue(iter.next()); assertEquals(4, iter.getAdjNode()); assertPList(Helper.createPointList(1, 9, 1, 8, 1, 7, 1, 6, 1, 5), iter.fetchWayGeometry(0)); assertPList( Helper.createPointList(0.99, 0.99, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5), iter.fetchWayGeometry(1)); assertPList( Helper.createPointList(1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 0.4, 0.4), iter.fetchWayGeometry(2)); assertPList( Helper.createPointList(0.99, 0.99, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 0.4, 0.4), iter.fetchWayGeometry(3)); assertFalse(iter.next()); }
@After public void tearDown() { Helper.close((Closeable) graph); Helper.removeDir(new File(locationParent)); }
@Before public void setUp() { Helper.removeDir(new File(locationParent)); }