jiayuasu commented on code in PR #2863:
URL: https://github.com/apache/sedona/pull/2863#discussion_r3144421388


##########
common/src/test/java/org/apache/sedona/common/FunctionsTest.java:
##########
@@ -1081,6 +1081,163 @@ public void testS2ToGeom() {
     assertTrue(polygons[100].intersects(target));
   }
 
+  @Test
+  public void testS2CoverageContainsInput() throws ParseException {
+    String wkt =
+        "POLYGON ((-102.060778 39.9999603, -102.0535384 40.0119065, -101.98532 
40.0122906, "
+            + "-95.30829 40.009008, -95.2456364 39.9564784, -95.1982467 
39.9455019, "
+            + "-95.1964657 39.9113444, -95.1460439 39.9142017, -95.1316877 
39.8855881, "
+            + "-95.087643 39.8717975, -95.0389987 39.8749063, -95.0146232 
39.9088422, "
+            + "-94.9403146 39.906409, -94.9183761 39.8846514, -94.9329504 
39.8578468, "
+            + "-94.8824331 39.8409102, -94.8675709 39.8227528, -94.878404 
39.787242, "
+            + "-94.9266292 39.7786779, -94.9070076 39.7679231, -94.8631596 
39.779774, "
+            + "-94.8497103 39.7604914, -94.8545514 39.7397163, -94.8985678 
39.7150641, "
+            + "-94.9584897 39.7331377, -94.9637588 39.6814526, -95.0187723 
39.6615712, "
+            + "-95.0456083 39.6252182, -95.0430365 39.5826542, -95.0650104 
39.5677387, "
+            + "-95.0985514 39.570063, -95.1012286 39.5462821, -95.0459187 
39.5064755, "
+            + "-95.0320969 39.4709074, -94.976457 39.4475392, -94.9362514 
39.3964717, "
+            + "-94.8781205 39.3949417, -94.8733156 39.3663291, -94.9014695 
39.3495654, "
+            + "-94.8963639 39.3135051, -94.8237994 39.2609956, -94.8194328 
39.2178517, "
+            + "-94.7789019 39.214907, -94.7398645 39.1789812, -94.6785238 
39.1931279, "
+            + "-94.6533801 39.1816662, -94.6517728 39.1640754, -94.605515 
39.1696807, "
+            + "-94.5791896 39.1504025, -94.5983384 39.1134256, -94.6095667 
36.9948123, "
+            + "-102.045765 36.9847897, -102.060778 39.9999603))";
+    Geometry input = geomFromWKT(wkt, 0);
+    Long[] cellIds = Functions.s2CellIDs(input, 12);
+    Geometry[] polygons =
+        
Functions.s2ToGeom(Arrays.stream(cellIds).mapToLong(Long::longValue).toArray());
+    Geometry coverage = Functions.union(polygons);
+    if (!coverage.covers(input)) {

Review Comment:
   Acknowledged but not changed. The full FunctionsTest suite (286 tests 
including all the new coverage assertions) runs in ~34 s on my laptop and the 
CI build job has historically been the long pole on Sedona PRs by orders of 
magnitude — these tests do not move that needle.
   
   `testS2CoverageContainsInput` is the only one at level 12 with the full 
reporter polygon (~50k cells); the rest run at level 6–10 on simpler inputs and 
produce only a few thousand cells each. The level-12 test is the canonical 
regression for the reported issue and uses the union/difference pair to give a 
precise area diagnostic on failure, which a sampling/index-based check cannot.
   
   A spatial-index-based sampling check would be cheaper but inexact (it could 
miss thin slivers between sample points, which is exactly the failure mode this 
PR fixes). Given the actual measured cost and the value of an exact containment 
assertion on the reproducer, I think keeping `Functions.union` + `covers` is 
the right tradeoff. Happy to revisit if these tests show up in CI flakiness or 
runtime budgets later.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to