// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.data.osm;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.data.coor.LatLonTest;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Checks that rounding of coordinates is not too slow.
*/
public class RoundingPerformanceTest {
private static double oldRoundToOsmPrecision(double value) {
// Old method, causes rounding errors, but efficient
return Math.round(value / LatLon.MAX_SERVER_PRECISION) * LatLon.MAX_SERVER_PRECISION;
}
/**
* Checks that rounding of coordinates is not too slow.
*/
@Test
@SuppressFBWarnings(value = "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT")
public void testRounding() {
final int n = 1000000;
long start = System.nanoTime();
for (int i = 0; i < n; i++) {
for (double value : LatLonTest.SAMPLE_VALUES) {
oldRoundToOsmPrecision(value);
}
}
long end = System.nanoTime();
long oldTime = end-start;
System.out.println("Old time: "+oldTime/1000000.0 + " ms");
start = System.nanoTime();
for (int i = 0; i < n; i++) {
for (double value : LatLonTest.SAMPLE_VALUES) {
LatLon.roundToOsmPrecision(value);
}
}
end = System.nanoTime();
long newTime = end-start;
System.out.println("New time: "+newTime/1000000.0 + " ms");
assertTrue(newTime <= oldTime*12);
}
}