package de.danielbasedow.prospecter.core.index; import de.danielbasedow.prospecter.core.Matcher; import de.danielbasedow.prospecter.core.query.QueryManager; import de.danielbasedow.prospecter.core.query.QueryPosting; import de.danielbasedow.prospecter.core.Token; import de.danielbasedow.prospecter.core.document.Field; import de.danielbasedow.prospecter.core.geo.GeoPerimeter; import de.danielbasedow.prospecter.core.geo.LatLng; import gnu.trove.list.TLongList; import junit.framework.TestCase; import java.util.ArrayList; import java.util.List; public class GeoDistanceIndexTest extends TestCase { public void testMatching() { GeoDistanceIndex index = new GeoDistanceIndex("foo"); GeoPerimeter perimeter = new GeoPerimeter(53.55, 10, 100000); //Hamburg, Germany +100km Token<GeoPerimeter> t = new Token<GeoPerimeter>(perimeter); index.addPosting(t, QueryPosting.pack(1, 1, false)); LatLng latLng = new LatLng(53.866, 10.684); //Lübeck, about 65km north-east of Hamburg List<Token> tokens = new ArrayList<Token>(); tokens.add(new Token<LatLng>(latLng)); Field field = new Field("foo", tokens); Matcher matcher = new Matcher(new QueryManager()); index.match(field, matcher); assertEquals(1, matcher.getPositiveMatchCount()); } public void testWesternWrap() { GeoDistanceIndex index = new GeoDistanceIndex("foo"); GeoPerimeter perimeter = new GeoPerimeter(53.55, -179.98, 100000); //somewhere in Russia +100km Token<GeoPerimeter> t = new Token<GeoPerimeter>(perimeter); index.addPosting(t, QueryPosting.pack(1, 1, false)); LatLng latLng = new LatLng(53.55, 179.98); //also somewhere in Russia List<Token> tokens = new ArrayList<Token>(); tokens.add(new Token<LatLng>(latLng)); Field field = new Field("foo", tokens); Matcher matcher = new Matcher(new QueryManager()); index.match(field, matcher); assertEquals(1, matcher.getPositiveMatchCount()); } public void testEasternWrap() { GeoDistanceIndex index = new GeoDistanceIndex("foo"); GeoPerimeter perimeter = new GeoPerimeter(53.55, 179.98, 100000); //somewhere in Russia +100km Token<GeoPerimeter> t = new Token<GeoPerimeter>(perimeter); index.addPosting(t, QueryPosting.pack(1, 1, false)); LatLng latLng = new LatLng(53.55, -179.98); //also somewhere in Russia List<Token> tokens = new ArrayList<Token>(); tokens.add(new Token<LatLng>(latLng)); Field field = new Field("foo", tokens); Matcher matcher = new Matcher(new QueryManager()); index.match(field, matcher); assertEquals(1, matcher.getPositiveMatchCount()); } }