Subversion Repositories mkgmap

Rev

Rev 3605 | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * 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);
                }
        }
        }
}