/*
* Copyright (C) 2014 Gerd Petermann
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* version 2 as published by the Free Software Foundation.
*
* 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.
*/
package uk.me.parabola.util;
import static org.junit.Assert.assertFalse;
import org.junit.Test;
import uk.me.parabola.imgfmt.app.Coord;
import uk.me.parabola.mkgmap.general.MapPoint;
import uk.me.parabola.util.KdTree;
public class KdTreeTest {
@Test
public void TestFindNextPoint(){
KdTree<MapPoint> t = new KdTree<>( );
int [][]test = {{70,20}, {50,40}, {90,60}, {20,30}, {40,70}, {80,10}, {-10,20}, {-30,-40} } ;
Coord []testCoords = new Coord[test.length];
for( int i = 0; i < test.length; i++ )
{
MapPoint p = new MapPoint();
testCoords[i] = new Coord(test[i][0],test[i][1]);
p.setLocation(testCoords[i]);
t.add(p);
}
// compare naive search result with kd--tree result
MapPoint toFind = new MapPoint();
for (int x = -100; x < 100; x++){
for (int y = -100; y < 100; y++){
Coord co = new Coord(x,y);
double minDist = Double.MAX_VALUE;
for (int i = 0; i<testCoords.length; i++){
Double dist = testCoords[i].distanceInDegreesSquared(co);
if (dist < minDist){
minDist = dist;
}
}
toFind.setLocation(co);
MapPoint next = (MapPoint) t.findNextPoint(toFind);
double dist = next.getLocation().distanceInDegreesSquared(co);
double delta = Math.abs(dist - minDist);
// if this test fails because
assertFalse("delta should be 0.0: " + delta, delta != 0.0);
}
}
}
}