@Test public void testUseCache() { AlgorithmPreparation prep = prepareGraph(createTestGraph()); RoutingAlgorithm algo = prep.createAlgo(); Path p = algo.calcPath(0, 4); assertEquals(Helper.createTList(0, 4), p.calcNodes()); // expand SPT p = algo.calcPath(0, 7); assertEquals(Helper.createTList(0, 4, 6, 5, 7), p.calcNodes()); // use SPT p = algo.calcPath(0, 2); assertEquals(Helper.createTList(0, 1, 2), p.calcNodes()); }
public TestAlgoCollector assertDistance( AlgoHelperEntry algoEntry, List<QueryResult> queryList, OneRun oneRun) { List<Path> altPaths = new ArrayList<Path>(); QueryGraph queryGraph = new QueryGraph(algoEntry.getQueryGraph()); queryGraph.lookup(queryList); AlgorithmOptions opts = algoEntry.opts; FlagEncoder encoder = opts.getFlagEncoder(); if (encoder.supports(TurnWeighting.class)) algoEntry.setAlgorithmOptions( AlgorithmOptions.start(opts) .weighting( new TurnWeighting( opts.getWeighting(), opts.getFlagEncoder(), (TurnCostExtension) queryGraph.getExtension())) .build()); for (int i = 0; i < queryList.size() - 1; i++) { RoutingAlgorithm algo = algoEntry.createAlgo(queryGraph); Path path = algo.calcPath(queryList.get(i).getClosestNode(), queryList.get(i + 1).getClosestNode()); // System.out.println(path.calcInstructions().createGPX("temp", 0, "GMT")); altPaths.add(path); } PathMerger pathMerger = new PathMerger().setCalcPoints(true).setSimplifyResponse(false).setEnableInstructions(true); AltResponse rsp = new AltResponse(); pathMerger.doWork(rsp, altPaths, trMap.getWithFallBack(Locale.US)); if (rsp.hasErrors()) { errors.add( algoEntry + " response contains errors. Expected distance: " + rsp.getDistance() + ", expected points: " + oneRun + ". " + queryList + ", errors:" + rsp.getErrors()); return this; } PointList pointList = rsp.getPoints(); double tmpDist = pointList.calcDistance(distCalc); if (Math.abs(rsp.getDistance() - tmpDist) > 2) { errors.add( algoEntry + " path.getDistance was " + rsp.getDistance() + "\t pointList.calcDistance was " + tmpDist + "\t (expected points " + oneRun.getLocs() + ", expected distance " + oneRun.getDistance() + ") " + queryList); } if (Math.abs(rsp.getDistance() - oneRun.getDistance()) > 2) { errors.add( algoEntry + " returns path not matching the expected distance of " + oneRun.getDistance() + "\t Returned was " + rsp.getDistance() + "\t (expected points " + oneRun.getLocs() + ", was " + pointList.getSize() + ") " + queryList); } // There are real world instances where A-B-C is identical to A-C (in meter precision). if (Math.abs(pointList.getSize() - oneRun.getLocs()) > 1) { errors.add( algoEntry + " returns path not matching the expected points of " + oneRun.getLocs() + "\t Returned was " + pointList.getSize() + "\t (expected distance " + oneRun.getDistance() + ", was " + rsp.getDistance() + ") " + queryList); } return this; }