@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 testDirectional() { graph = createGraph(); graph.edge(1, 2, 12, true); graph.edge(2, 3, 12, false); graph.edge(3, 4, 12, false); graph.edge(3, 5, 12, true); graph.edge(6, 3, 12, false); assertEquals(1, count(carAllExplorer.setBaseNode(1))); assertEquals(1, count(carInExplorer.setBaseNode(1))); assertEquals(1, count(carOutExplorer.setBaseNode(1))); assertEquals(2, count(carAllExplorer.setBaseNode(2))); assertEquals(1, count(carInExplorer.setBaseNode(2))); assertEquals(2, count(carOutExplorer.setBaseNode(2))); assertEquals(4, count(carAllExplorer.setBaseNode(3))); assertEquals(3, count(carInExplorer.setBaseNode(3))); assertEquals(2, count(carOutExplorer.setBaseNode(3))); assertEquals(1, count(carAllExplorer.setBaseNode(4))); assertEquals(1, count(carInExplorer.setBaseNode(4))); assertEquals(0, count(carOutExplorer.setBaseNode(4))); assertEquals(1, count(carAllExplorer.setBaseNode(5))); assertEquals(1, count(carInExplorer.setBaseNode(5))); assertEquals(1, count(carOutExplorer.setBaseNode(5))); }
@Test public void testUnidirectionalEdgeFilter() { graph = createGraph(); graph.edge(1, 2, 12, false); graph.edge(1, 11, 12, false); graph.edge(11, 1, 12, false); graph.edge(1, 12, 12, false); graph.edge(3, 2, 112, false); EdgeIterator i = carOutExplorer.setBaseNode(2); assertFalse(i.next()); assertEquals(4, GHUtility.count(carAllExplorer.setBaseNode(1))); assertEquals(1, GHUtility.count(carInExplorer.setBaseNode(1))); assertEquals(2, GHUtility.count(carInExplorer.setBaseNode(2))); assertEquals(0, GHUtility.count(carInExplorer.setBaseNode(3))); assertEquals(3, GHUtility.count(carOutExplorer.setBaseNode(1))); assertEquals(0, GHUtility.count(carOutExplorer.setBaseNode(2))); assertEquals(1, GHUtility.count(carOutExplorer.setBaseNode(3))); i = carOutExplorer.setBaseNode(3); i.next(); assertEquals(2, i.getAdjNode()); i = carOutExplorer.setBaseNode(1); assertTrue(i.next()); assertEquals(12, i.getAdjNode()); assertTrue(i.next()); assertEquals(11, i.getAdjNode()); assertTrue(i.next()); assertEquals(2, i.getAdjNode()); assertFalse(i.next()); }
@Test public void testGetAllEdges() { graph = createGraph(); graph.edge(0, 1, 2, true); graph.edge(3, 1, 1, false); graph.edge(3, 2, 1, false); EdgeIterator iter = graph.getAllEdges(); assertTrue(iter.next()); int edgeId = iter.getEdge(); assertEquals(0, iter.getBaseNode()); assertEquals(1, iter.getAdjNode()); assertEquals(2, iter.getDistance(), 1e-6); assertTrue(iter.next()); int edgeId2 = iter.getEdge(); assertEquals(1, edgeId2 - edgeId); assertEquals(1, iter.getBaseNode()); assertEquals(3, iter.getAdjNode()); assertTrue(iter.next()); assertEquals(2, iter.getBaseNode()); assertEquals(3, iter.getAdjNode()); assertFalse(iter.next()); }
@Test public void test8BytesFlags() { Directory dir = new RAMDirectory(); List<FlagEncoder> list = new ArrayList<FlagEncoder>(); list.add(new TmpCarFlagEncoder(29, 0.001)); list.add(new TmpCarFlagEncoder(29, 0.001)); EncodingManager manager = new EncodingManager(list, 8, 0); graph = new GraphHopperStorage(dir, manager, false).create(defaultSize); EdgeIteratorState edge = graph.edge(0, 1); edge.setFlags(Long.MAX_VALUE / 3); // System.out.println(BitUtil.LITTLE.toBitString(Long.MAX_VALUE / 3) + "\n" + // BitUtil.LITTLE.toBitString(edge.getFlags())); assertEquals(Long.MAX_VALUE / 3, edge.getFlags()); graph.close(); graph = new GraphHopperStorage(dir, manager, false).create(defaultSize); edge = graph.edge(0, 1); edge.setFlags(list.get(0).setProperties(99.123, true, true)); assertEquals(99.123, list.get(0).getSpeed(edge.getFlags()), 1e-3); long flags = GHUtility.getEdge(graph, 1, 0).getFlags(); assertEquals(99.123, list.get(0).getSpeed(flags), 1e-3); assertTrue(list.get(0).isBool(flags, FlagEncoder.K_FORWARD)); assertTrue(list.get(0).isBool(flags, FlagEncoder.K_BACKWARD)); edge = graph.edge(2, 3); edge.setFlags(list.get(1).setProperties(44.123, true, false)); assertEquals(44.123, list.get(1).getSpeed(edge.getFlags()), 1e-3); flags = GHUtility.getEdge(graph, 3, 2).getFlags(); assertEquals(44.123, list.get(1).getSpeed(flags), 1e-3); assertTrue(list.get(1).isBool(flags, FlagEncoder.K_FORWARD)); assertFalse(list.get(1).isBool(flags, FlagEncoder.K_BACKWARD)); }
protected GraphStorage createGraph() { GraphStorage g = createGraph(defaultGraphLoc, false); carOutExplorer = g.createEdgeExplorer(carOutFilter); carInExplorer = g.createEdgeExplorer(carInFilter); carAllExplorer = g.createEdgeExplorer(); return g; }
@Override public String toString() { return tmp.getClass().getSimpleName() + "|" + tmp.getDirectory().getClass().getSimpleName() + "|" + tmp.getVersion(); }
@Override public GraphStorage createGraph(String location, boolean is3D) { GraphStorage gs = new GraphBuilder(encodingManager).set3D(is3D).setLocation(location).setMmap(true).build(); gs.setSegmentSize(defaultSize / 2); gs.create(defaultSize); return gs; }
@Test public void testCreateLocation() { graph = createGraph(); graph.edge(3, 1, 50, true); assertEquals(1, count(carOutExplorer.setBaseNode(1))); graph.edge(1, 2, 100, true); assertEquals(2, count(carOutExplorer.setBaseNode(1))); }
@Test public void testDeleteAndOptimize() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(20, 10, 10); na.setNode(21, 10, 11); graph.markNodeRemoved(20); graph.optimize(); assertEquals(11, na.getLongitude(20), 1e-5); }
@Test public void testSimpleDelete() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(0, 12, 23); na.setNode(1, 38.33f, 135.3f); na.setNode(2, 3, 3); na.setNode(3, 78, 89); graph.edge(3, 0, 21, true); graph.edge(5, 0, 22, true); graph.edge(5, 3, 23, true); graph.markNodeRemoved(0); graph.markNodeRemoved(3); assertEquals(6, graph.getNodes()); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(graph)); // now actually perform deletion graph.optimize(); assertEquals(4, graph.getNodes()); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(graph)); // shouldn't change anything graph.optimize(); assertEquals(4, graph.getNodes()); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(graph)); }
@Test public void testSetNodes() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); for (int i = 0; i < defaultSize * 2; i++) { na.setNode(i, 2 * i, 3 * i); } graph.edge(defaultSize + 1, defaultSize + 2, 10, true); graph.edge(defaultSize + 1, defaultSize + 3, 10, true); assertEquals(2, GHUtility.count(carAllExplorer.setBaseNode(defaultSize + 1))); }
@Test public void testEdgeReturn() { graph = createGraph(); EdgeIteratorState iter = graph.edge(4, 10).setDistance(100).setFlags(carEncoder.setProperties(10, true, false)); assertEquals(4, iter.getBaseNode()); assertEquals(10, iter.getAdjNode()); iter = graph.edge(14, 10).setDistance(100).setFlags(carEncoder.setProperties(10, true, false)); assertEquals(14, iter.getBaseNode()); assertEquals(10, iter.getAdjNode()); }
@Test public void testEdges() { graph = createGraph(); graph.edge(2, 1, 12, true); assertEquals(1, count(carOutExplorer.setBaseNode(2))); graph.edge(2, 3, 12, true); assertEquals(1, count(carOutExplorer.setBaseNode(1))); assertEquals(2, count(carOutExplorer.setBaseNode(2))); assertEquals(1, count(carOutExplorer.setBaseNode(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 testNameIndex() { graph = createGraph(); EdgeIteratorState iter1 = graph.edge(0, 1, 10, true); iter1.setName("named street1"); EdgeIteratorState iter2 = graph.edge(0, 1, 10, true); iter2.setName("named street2"); assertEquals( "named street1", graph.getEdgeProps(iter1.getEdge(), iter1.getAdjNode()).getName()); assertEquals( "named street2", graph.getEdgeProps(iter2.getEdge(), iter2.getAdjNode()).getName()); }
@Test public void testSimpleDelete3() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(7, 7, 1); na.setNode(8, 8, 1); na.setNode(9, 9, 1); na.setNode(11, 11, 1); // mini subnetwork which gets completely removed: graph.edge(5, 10, 510, true); graph.markNodeRemoved(3); graph.markNodeRemoved(4); graph.markNodeRemoved(5); graph.markNodeRemoved(10); graph.edge(9, 11, 911, true); graph.edge(7, 9, 78, true); graph.edge(8, 9, 89, true); // perform deletion graph.optimize(); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(graph)); assertEquals(3, GHUtility.count(carAllExplorer.setBaseNode(getIdOf(graph, 9)))); assertEquals(1, GHUtility.count(carAllExplorer.setBaseNode(getIdOf(graph, 7)))); assertEquals(1, GHUtility.count(carAllExplorer.setBaseNode(getIdOf(graph, 8)))); assertEquals(1, GHUtility.count(carAllExplorer.setBaseNode(getIdOf(graph, 11)))); }
@Test public void testDozendEdges() { graph = createGraph(); graph.edge(1, 2, 12, true); assertEquals(1, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 3, 13, false); assertEquals(2, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 4, 14, false); assertEquals(3, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 5, 15, false); assertEquals(4, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 6, 16, false); assertEquals(5, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 7, 16, false); assertEquals(6, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 8, 16, false); assertEquals(7, count(carAllExplorer.setBaseNode(1))); graph.edge(1, 9, 16, false); assertEquals(8, count(carAllExplorer.setBaseNode(1))); assertEquals(8, count(carOutExplorer.setBaseNode(1))); assertEquals(1, count(carInExplorer.setBaseNode(1))); assertEquals(1, count(carInExplorer.setBaseNode(2))); }
@Test public void testGetAllEdgesWithDelete() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(0, 0, 5); na.setNode(1, 1, 5); na.setNode(2, 2, 5); na.setNode(3, 3, 5); graph.edge(0, 1, 1, true); graph.edge(0, 2, 1, true); graph.edge(1, 2, 1, true); graph.edge(2, 3, 1, true); AllEdgesIterator iter = graph.getAllEdges(); assertEquals(4, GHUtility.count(iter)); assertEquals(4, iter.getMaxId()); // delete graph.markNodeRemoved(1); graph.optimize(); iter = graph.getAllEdges(); assertEquals(2, GHUtility.count(iter)); assertEquals(4, iter.getMaxId()); iter = graph.getAllEdges(); iter.next(); EdgeIteratorState eState = iter.detach(false); assertEquals(iter.toString(), eState.toString()); iter.next(); assertNotEquals(iter.toString(), eState.toString()); EdgeIteratorState eState2 = iter.detach(true); assertEquals(iter.getAdjNode(), eState2.getBaseNode()); iter.next(); assertNotEquals(iter.getAdjNode(), eState2.getBaseNode()); }
@Test public void testFootMix() { graph = createGraph(); graph.edge(0, 1).setDistance(10).setFlags(footEncoder.setProperties(10, true, true)); graph.edge(0, 2).setDistance(10).setFlags(carEncoder.setProperties(10, true, true)); graph .edge(0, 3) .setDistance(10) .setFlags( footEncoder.setProperties(10, true, true) | carEncoder.setProperties(10, true, true)); EdgeExplorer footOutExplorer = graph.createEdgeExplorer(new DefaultEdgeFilter(footEncoder, false, true)); assertEquals(GHUtility.asSet(3, 1), GHUtility.getNeighbors(footOutExplorer.setBaseNode(0))); assertEquals(GHUtility.asSet(3, 2), GHUtility.getNeighbors(carOutExplorer.setBaseNode(0))); }
@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 testIdenticalNodes2() { graph = createGraph(); graph.edge(0, 0, 100, false); graph.edge(0, 0, 100, false); assertEquals(2, GHUtility.count(carAllExplorer.setBaseNode(0))); }
@Test public void testInfinityWeight() { graph = createGraph(); EdgeIteratorState edge = graph.edge(0, 1); edge.setDistance(Double.POSITIVE_INFINITY); assertTrue(Double.isInfinite(edge.getDistance())); }
@Test public void testBounds() { graph = createGraph(); BBox b = graph.getBounds(); assertEquals(BBox.INVERSE.maxLat, b.maxLat, 1e-6); NodeAccess na = graph.getNodeAccess(); na.setNode(0, 10, 20); assertEquals(10, b.maxLat, 1e-6); assertEquals(20, b.maxLon, 1e-6); na.setNode(0, 15, -15); assertEquals(15, b.maxLat, 1e-6); assertEquals(20, b.maxLon, 1e-6); assertEquals(10, b.minLat, 1e-6); assertEquals(-15, b.minLon, 1e-6); }
@Test public void testCheckFirstNode() { graph = createGraph(); assertEquals(0, count(carAllExplorer.setBaseNode(1))); graph.edge(0, 1, 12, true); assertEquals(1, count(carAllExplorer.setBaseNode(1))); }
@Test public void testDeleteNodeForUnidir() { graph = createGraph(); NodeAccess na = graph.getNodeAccess(); na.setNode(10, 10, 1); na.setNode(6, 6, 1); na.setNode(20, 20, 1); na.setNode(21, 21, 1); graph.edge(10, 20, 10, false); graph.edge(21, 6, 10, false); graph.markNodeRemoved(0); graph.markNodeRemoved(7); assertEquals(22, graph.getNodes()); graph.optimize(); assertEquals(20, graph.getNodes()); assertEquals(1, GHUtility.count(carInExplorer.setBaseNode(getIdOf(graph, 20)))); assertEquals(0, GHUtility.count(carOutExplorer.setBaseNode(getIdOf(graph, 20)))); assertEquals(1, GHUtility.count(carOutExplorer.setBaseNode(getIdOf(graph, 10)))); assertEquals(0, GHUtility.count(carInExplorer.setBaseNode(getIdOf(graph, 10)))); assertEquals(1, GHUtility.count(carInExplorer.setBaseNode(getIdOf(graph, 6)))); assertEquals(0, GHUtility.count(carOutExplorer.setBaseNode(getIdOf(graph, 6)))); assertEquals(1, GHUtility.count(carOutExplorer.setBaseNode(getIdOf(graph, 21)))); assertEquals(0, GHUtility.count(carInExplorer.setBaseNode(getIdOf(graph, 21)))); }
@Override public void init(GraphStorage graph) { if (turnCostsCount > 0) throw new AssertionError("The turn cost storage must be initialized only once."); this.graph = graph; this.nodeAccess = graph.getNodeAccess(); this.turnCosts = this.graph.getDirectory().find("turnCosts"); }
@Override public boolean loadExisting() { if (!turnCosts.loadExisting()) throw new IllegalStateException( "cannot load node costs. corrupt file or directory? " + graph.getDirectory()); turnCostsEntryBytes = turnCosts.getHeader(0); turnCostsCount = turnCosts.getHeader(4); return true; }
@Test public void testFlags() { graph = createGraph(); graph.edge(0, 1).setDistance(10).setFlags(carEncoder.setProperties(100, true, true)); graph.edge(2, 3).setDistance(10).setFlags(carEncoder.setProperties(10, true, false)); EdgeIterator iter = carAllExplorer.setBaseNode(0); assertTrue(iter.next()); assertEquals(carEncoder.setProperties(100, true, true), iter.getFlags()); iter = carAllExplorer.setBaseNode(2); assertTrue(iter.next()); assertEquals(carEncoder.setProperties(10, true, false), iter.getFlags()); try { graph.edge(0, 1).setDistance(-1); assertTrue(false); } catch (IllegalArgumentException ex) { } }
@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)); }