You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/02/29 21:45:27 UTC

lucene-solr git commit: also test LatLonPoint.newDistanceQuery from TestLatLonPointQueries, and remove some test leniency

Repository: lucene-solr
Updated Branches:
  refs/heads/master 9a3458f69 -> 3cc8b6f8f


also test LatLonPoint.newDistanceQuery from TestLatLonPointQueries, and remove some test leniency


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3cc8b6f8
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3cc8b6f8
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3cc8b6f8

Branch: refs/heads/master
Commit: 3cc8b6f8fd3c36cbd662540c890ec815bd312b6d
Parents: 9a3458f
Author: Mike McCandless <mi...@apache.org>
Authored: Mon Feb 29 15:45:09 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Mon Feb 29 15:45:09 2016 -0500

----------------------------------------------------------------------
 .../lucene/search/TestLatLonPointQueries.java   | 63 +++++++++++++++-----
 .../spatial/util/BaseGeoPointTestCase.java      | 20 +++++--
 2 files changed, 64 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3cc8b6f8/lucene/sandbox/src/test/org/apache/lucene/search/TestLatLonPointQueries.java
----------------------------------------------------------------------
diff --git a/lucene/sandbox/src/test/org/apache/lucene/search/TestLatLonPointQueries.java b/lucene/sandbox/src/test/org/apache/lucene/search/TestLatLonPointQueries.java
index 0916b15..7798b97 100644
--- a/lucene/sandbox/src/test/org/apache/lucene/search/TestLatLonPointQueries.java
+++ b/lucene/sandbox/src/test/org/apache/lucene/search/TestLatLonPointQueries.java
@@ -39,9 +39,7 @@ public class TestLatLonPointQueries extends BaseGeoPointTestCase {
 
   @Override
   protected Query newDistanceQuery(String field, double centerLat, double centerLon, double radiusMeters) {
-    // TODO: fix this to be debuggable before enabling!
-    // return LatLonPoint.newDistanceQuery(field, centerLat, centerLon, radiusMeters);
-    return null;
+    return LatLonPoint.newDistanceQuery(field, centerLat, centerLon, radiusMeters);
   }
 
   @Override
@@ -59,6 +57,53 @@ public class TestLatLonPointQueries extends BaseGeoPointTestCase {
 
     assert Double.isNaN(pointLat) == false;
 
+    int rectLatMinEnc = LatLonPoint.encodeLat(rect.minLat);
+    int rectLatMaxEnc = LatLonPoint.encodeLat(rect.maxLat);
+    int rectLonMinEnc = LatLonPoint.encodeLon(rect.minLon);
+    int rectLonMaxEnc = LatLonPoint.encodeLon(rect.maxLon);
+
+    int pointLatEnc = LatLonPoint.encodeLat(pointLat);
+    int pointLonEnc = LatLonPoint.encodeLon(pointLon);
+
+    if (rect.minLon < rect.maxLon) {
+      return pointLatEnc >= rectLatMinEnc &&
+        pointLatEnc < rectLatMaxEnc &&
+        pointLonEnc >= rectLonMinEnc &&
+        pointLonEnc < rectLonMaxEnc;
+    } else {
+      // Rect crosses dateline:
+      return pointLatEnc >= rectLatMinEnc &&
+        pointLatEnc < rectLatMaxEnc &&
+        (pointLonEnc >= rectLonMinEnc ||
+         pointLonEnc < rectLonMaxEnc);
+    }
+  }
+
+  @Override
+  protected double quantizeLat(double latRaw) {
+    return LatLonPoint.decodeLat(LatLonPoint.encodeLat(latRaw));
+  }
+
+  @Override
+  protected double quantizeLon(double lonRaw) {
+    return LatLonPoint.decodeLon(LatLonPoint.encodeLon(lonRaw));
+  }
+
+  // todo reconcile with GeoUtils (see LUCENE-6996)
+  public static double compare(final double v1, final double v2) {
+    final double delta = v1-v2;
+    return Math.abs(delta) <= BKD_TOLERANCE ? 0 : delta;
+  }
+
+  @Override
+  protected Boolean polyRectContainsPoint(GeoRect rect, double pointLat, double pointLon) {
+    // TODO write better random polygon tests
+
+    assert Double.isNaN(pointLat) == false;
+
+    // TODO: this comment is wrong!  we have fixed the quantization error (we now pre-quantize all randomly generated test points) yet the test
+    // still fails if we remove this evil "return null":
+    
     // false positive/negatives due to quantization error exist for both rectangles and polygons
     if (compare(pointLat, rect.minLat) == 0
         || compare(pointLat, rect.maxLat) == 0
@@ -89,18 +134,6 @@ public class TestLatLonPointQueries extends BaseGeoPointTestCase {
     }
   }
 
-  // todo reconcile with GeoUtils (see LUCENE-6996)
-  public static double compare(final double v1, final double v2) {
-    final double delta = v1-v2;
-    return Math.abs(delta) <= BKD_TOLERANCE ? 0 : delta;
-  }
-
-  @Override
-  protected Boolean polyRectContainsPoint(GeoRect rect, double pointLat, double pointLon) {
-    // TODO write better random polygon tests
-    return rectContainsPoint(rect, pointLat, pointLon);
-  }
-
   @Override
   protected Boolean circleContainsPoint(double centerLat, double centerLon, double radiusMeters, double pointLat, double pointLon) {
     double distanceMeters = GeoDistanceUtils.haversin(centerLat, centerLon, pointLat, pointLon);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3cc8b6f8/lucene/spatial/src/test/org/apache/lucene/spatial/util/BaseGeoPointTestCase.java
----------------------------------------------------------------------
diff --git a/lucene/spatial/src/test/org/apache/lucene/spatial/util/BaseGeoPointTestCase.java b/lucene/spatial/src/test/org/apache/lucene/spatial/util/BaseGeoPointTestCase.java
index 1980e9a..8313616 100644
--- a/lucene/spatial/src/test/org/apache/lucene/spatial/util/BaseGeoPointTestCase.java
+++ b/lucene/spatial/src/test/org/apache/lucene/spatial/util/BaseGeoPointTestCase.java
@@ -422,7 +422,7 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
     } else {
       result = -90 + 180.0 * random().nextDouble();
     }
-    return result;
+    return quantizeLat(result);
   }
 
   public double randomLon(boolean small) {
@@ -432,7 +432,19 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
     } else {
       result = -180 + 360.0 * random().nextDouble();
     }
-    return result;
+    return quantizeLon(result);
+  }
+
+  /** Override this to quantize randomly generated lat, so the test won't fail due to quantization errors, which are 1) annoying to debug,
+   *  and 2) should never affect "real" usage terribly. */
+  protected double quantizeLat(double lat) {
+    return lat;
+  }
+
+  /** Override this to quantize randomly generated lon, so the test won't fail due to quantization errors, which are 1) annoying to debug,
+   *  and 2) should never affect "real" usage terribly. */
+  protected double quantizeLon(double lon) {
+    return lon;
   }
 
   protected GeoRect randomRect(boolean small, boolean canCrossDateLine) {
@@ -694,9 +706,9 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
 
                     @Override
                     protected void describe(int docID, double pointLat, double pointLon) {
-                      double distanceKM = SloppyMath.haversin(centerLat, centerLon, pointLat, pointLon);
+                      double distanceMeters = GeoDistanceUtils.haversin(centerLat, centerLon, pointLat, pointLon);
                       System.out.println("  docID=" + docID + " centerLon=" + centerLon + " centerLat=" + centerLat
-                          + " pointLon=" + pointLon + " pointLat=" + pointLat + " distanceMeters=" + (distanceKM * 1000)
+                          + " pointLon=" + pointLon + " pointLat=" + pointLat + " distanceMeters=" + distanceMeters
                           + " vs" + ((rangeQuery == true) ? " minRadiusMeters=" + minRadiusMeters : "") + " radiusMeters=" + radiusMeters);
                     }
                    };