/* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.opentripplanner.routing.util; import java.util.Random; import junit.framework.TestCase; import org.opentripplanner.common.geometry.DistanceLibrary; import org.opentripplanner.common.geometry.SphericalDistanceLibrary; public class TestFastDistance extends TestCase { private static final int N_TEST = 100000; private static final double MAX_LAT = 70.0; private static final double MAX_DELTA_LAT = 6.0; private static final double MAX_DELTA_LON = 6.0; public void testFastDistance() { // Seed the random generator, if we have a failure // we'd like to be able to reproduce it... Random r = new Random(42); DistanceLibrary distanceLibrary = SphericalDistanceLibrary.getInstance(); for (int i = 0; i < N_TEST; i++) { double lat1 = r.nextDouble() * 2.0 * MAX_LAT - MAX_LAT; double lon1 = r.nextDouble() * 360.0; double lat2 = lat1 + r.nextDouble() * 2.0 * MAX_DELTA_LAT - MAX_DELTA_LAT; double lon2 = lon1 + r.nextDouble() * 2.0 * MAX_DELTA_LON - MAX_DELTA_LON; double de = distanceLibrary.distance(lat1, lon1, lat2, lon2); double da = distanceLibrary.fastDistance(lat1, lon1, lat2, lon2); assertTrue(da <= de); assertTrue(da >= de / 1.00054); } } }