[geos-commits] [SCM] GEOS branch 3.9 updated. 9d4cf22fe9608c58d7fe330bd38edbc682cbfaa8

git at osgeo.org git at osgeo.org
Thu Apr 8 10:37:08 PDT 2021


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GEOS".

The branch, 3.9 has been updated
       via  9d4cf22fe9608c58d7fe330bd38edbc682cbfaa8 (commit)
      from  13abebc94abe7b269104e85ba57181bbc17911b8 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 9d4cf22fe9608c58d7fe330bd38edbc682cbfaa8
Author: Martin Davis <mtnclimb at gmail.com>
Date:   Thu Apr 8 10:36:58 2021 -0700

    Fix IsValidOp nested shell detection

diff --git a/NEWS b/NEWS
index afc8202..f157ba8 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ Changes in 3.9.2
   - Add in interrupt points in OverlayNG (#4857, Paul Ramsey)
   - Fix crash in GEOSPreparedIntersects and GEOSPreparedContains for
     POINT EMPTY input (Even Rouault)
+  - Fix IsValidOp to correctly report invalid nested MultiPolygons (#1112, Martin Davis)
 
 
 Changes in 3.9.1
@@ -736,4 +737,3 @@ Changes in 2.0.0
   been dropped. You have to use GeometryFactory instead.
 - WKTWriter default constructor has been dropped. You need
   to initialize it with an explicit GeometryFactory
-
diff --git a/src/operation/valid/IndexedNestedShellTester.cpp b/src/operation/valid/IndexedNestedShellTester.cpp
index 91c1392..3e60aa8 100644
--- a/src/operation/valid/IndexedNestedShellTester.cpp
+++ b/src/operation/valid/IndexedNestedShellTester.cpp
@@ -171,7 +171,7 @@ IndexedNestedShellTester::checkShellNotNested(const geom::LinearRing* shell, Pol
         }
     }
 
-    nestedPt = badNestedPt;
+    nestedPt = shellPt;
 }
 
 
@@ -210,4 +210,3 @@ IndexedNestedShellTester::checkShellInsideHole(const geom::LinearRing* shell,
 }
 }
 }
-
diff --git a/tests/xmltester/tests/general/TestValid.xml b/tests/xmltester/tests/general/TestValid.xml
index 5a937a0..2fe177a 100644
--- a/tests/xmltester/tests/general/TestValid.xml
+++ b/tests/xmltester/tests/general/TestValid.xml
@@ -116,7 +116,7 @@ LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
          <op name="isValid" arg1="A">      false      </op>
       </test>
    </case>
-   
+
    <case>
       <desc>mL - MultiLinestring with two identical points in first component</desc>
       <a>MULTILINESTRING((1 1, 0 0), (0 0, 0 0))</a>
@@ -175,7 +175,7 @@ LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
 
    <case>
       <desc>A - polygon with degenerate hole ring (A-B-A) </desc>
-      <a>POLYGON ((0 0, 0 240, 260 240, 260 0, 0 0), 
+      <a>POLYGON ((0 0, 0 240, 260 240, 260 0, 0 0),
   (220 200, 40 200, 40 20, 40 200, 220 200, 220 200))</a>
       <test>
          <op name="isValid" arg1="A"> false </op>
@@ -273,8 +273,8 @@ LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
    </case>
    <case>
       <desc>A - holel touches hole without crossing it, but does so twice (invalid)</desc>
-      <a>POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), 
-		(100 100, 100 20, 120 20, 120 100, 100 100), 
+      <a>POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120),
+		(100 100, 100 20, 120 20, 120 100, 100 100),
 		(20 100, 20 40, 100 40, 80 60, 100 80, 20 100))</a>
       <test>
          <op name="isValid" arg1="A">false</op>
@@ -282,8 +282,8 @@ LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
    </case>
    <case>
       <desc>A - hole touches hole without crossing it, but does so at an infinite number of points (invalid)</desc>
-      <a>POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), 
-		(100 100, 100 20, 120 20, 120 100, 100 100), 
+      <a>POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120),
+		(100 100, 100 20, 120 20, 120 100, 100 100),
 		(20 100, 20 40, 100 40, 100 80, 20 100))</a>
       <test>
          <op name="isValid" arg1="A">false</op>
@@ -325,11 +325,11 @@ LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
          <op name="isValid" arg1="A">true</op>
       </test>
    </case>
-   
+
    <case>
       <desc>A - hole overlapping shell at non-vertex</desc>
       <a>
-POLYGON ((60 280, 260 180, 60 80, 60 280), 
+POLYGON ((60 280, 260 180, 60 80, 60 280),
   (140 80, 120 180, 200 180, 140 80))
   </a>
       <test>
@@ -352,7 +352,7 @@ POLYGON ((60 340, 60 100, 340 100, 340 280, 340 200, 340 340, 60 340))
    <case>
       <desc>A - hole with repeated points</desc>
       <a>
-POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260), 
+POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260),
   (70 230, 80 230, 80 220, 80 220, 70 230))  </a>
       <test>
          <op name="isValid" arg1="A">
@@ -363,7 +363,7 @@ POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260),
    <case>
       <desc>A - hole outside but adjacent to shell</desc>
       <a>
-POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260), 
+POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260),
   (180 160, 240 60, 120 60, 180 160))  </a>
       <test>
          <op name="isValid" arg1="A">
@@ -375,7 +375,7 @@ POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260),
    <case>
       <desc>A - hole touches shell at two points</desc>
       <a>
-POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
+POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260),
   (140 180, 40 180, 140 260, 140 180))
   </a>
       <test>
@@ -388,7 +388,7 @@ POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260),
    <case>
       <desc>A - hole touches shell at one non-vertex point</desc>
       <a>
-POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
+POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260),
   (140 180, 40 180, 140 240, 140 180))
   </a>
       <test>
@@ -399,7 +399,7 @@ POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260),
    <case>
       <desc>A - hole touches shell at one vertex point</desc>
       <a>
-POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
+POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260),
   (140 180, 40 260, 140 240, 140 180))
   </a>
       <test>
@@ -410,8 +410,8 @@ POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260),
    <case>
       <desc>A - hole outside shell</desc>
       <a>
-POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), 
-  (160 120, 180 100, 160 80, 160 120))  
+POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180),
+  (160 120, 180 100, 160 80, 160 120))
 </a>
       <test>
          <op name="isValid" arg1="A">
@@ -423,8 +423,8 @@ POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180),
    <case>
       <desc>A - hole identical to shell</desc>
       <a>
-POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), 
-  (20 180, 20 20, 140 20, 140 180, 20 180))  
+POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180),
+  (20 180, 20 20, 140 20, 140 180, 20 180))
 </a>
       <test>
          <op name="isValid" arg1="A">
@@ -436,8 +436,8 @@ POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180),
    <case>
       <desc>A - hole identical to shell</desc>
       <a>
-POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), 
-  (20 180, 20 20, 140 20, 140 180, 20 180))  
+POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180),
+  (20 180, 20 20, 140 20, 140 180, 20 180))
 </a>
       <test>
          <op name="isValid" arg1="A">
@@ -449,7 +449,7 @@ POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180),
    <case>
       <desc>A - hole self-intersects </desc>
       <a>
-POLYGON ((380 340, 40 340, 40 20, 380 20, 380 340), 
+POLYGON ((380 340, 40 340, 40 20, 380 20, 380 340),
   (120 300, 300 280, 320 200, 160 140, 200 80, 320 120, 320 200, 360 60, 120 40, 120 300))
 	</a>
       <test>
@@ -460,8 +460,8 @@ POLYGON ((380 340, 40 340, 40 20, 380 20, 380 340),
    <case>
       <desc>A - holes overlap, first point is identical </desc>
       <a>
-POLYGON ((20 320, 260 320, 260 20, 20 20, 20 320), 
-  (140 280, 80 100, 200 100, 140 280), 
+POLYGON ((20 320, 260 320, 260 20, 20 20, 20 320),
+  (140 280, 80 100, 200 100, 140 280),
   (140 280, 40 80, 240 80, 140 280))
 	</a>
       <test>
@@ -472,8 +472,8 @@ POLYGON ((20 320, 260 320, 260 20, 20 20, 20 320),
    <case>
       <desc>A - holes do not overlap, first point is identical </desc>
       <a>
-POLYGON ((20 320, 240 320, 240 40, 20 40, 20 320), 
-  (140 180, 60 120, 60 240, 140 180), 
+POLYGON ((20 320, 240 320, 240 40, 20 40, 20 320),
+  (140 180, 60 120, 60 240, 140 180),
   (140 180, 200 120, 200 240, 140 180))
 	</a>
       <test>
@@ -503,10 +503,10 @@ POLYGON ((300 320, 300 220, 260 260, 180 220, 360 220, 360 140, 120 140, 120 320
     <case>
       <desc>A - chain of holes surrounds an island inside the polygon </desc>
       <a>
-POLYGON ((40 300, 40 20, 280 20, 280 300, 40 300), 
-  (120 240, 80 180, 160 220, 120 240), 
-  (220 240, 160 220, 220 160, 220 240), 
-  (160 100, 80 180, 100 80, 160 100), 
+POLYGON ((40 300, 40 20, 280 20, 280 300, 40 300),
+  (120 240, 80 180, 160 220, 120 240),
+  (220 240, 160 220, 220 160, 220 240),
+  (160 100, 80 180, 100 80, 160 100),
   (160 100, 220 160, 240 100, 160 100))	</a>
       <test>
          <op name="isValid" arg1="A">      false      </op>
@@ -516,11 +516,11 @@ POLYGON ((40 300, 40 20, 280 20, 280 300, 40 300),
    <case>
       <desc>A - chain of holes splits polygon in two (touching at vertices) </desc>
       <a>
-POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320), 
-  (100 120, 40 20, 180 100, 100 120), 
-  (200 200, 180 100, 240 160, 200 200), 
-  (260 260, 240 160, 300 200, 260 260), 
-  (300 300, 300 200, 340 320, 300 300))	
+POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320),
+  (100 120, 40 20, 180 100, 100 120),
+  (200 200, 180 100, 240 160, 200 200),
+  (260 260, 240 160, 300 200, 260 260),
+  (300 300, 300 200, 340 320, 300 300))
 	</a>
       <test>
          <op name="isValid" arg1="A">      false      </op>
@@ -530,10 +530,10 @@ POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320),
    <case>
       <desc>A - chain of holes splits polygon in two (touching at non-vertex) </desc>
       <a>
-POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320), 
-  (100 120, 40 20, 180 100, 100 120), 
-  (200 200, 180 100, 240 160, 200 200), 
-  (260 260, 240 160, 300 200, 260 260), 
+POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320),
+  (100 120, 40 20, 180 100, 100 120),
+  (200 200, 180 100, 240 160, 200 200),
+  (260 260, 240 160, 300 200, 260 260),
   (300 300, 300 200, 340 260, 300 300))
 	</a>
       <test>
@@ -544,8 +544,8 @@ POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320),
    <case>
       <desc>A - holes touch in one point </desc>
       <a>
-POLYGON ((190 190, 360 20, 20 20, 190 190), 
-  (90 50, 150 110, 190 50, 90 50), 
+POLYGON ((190 190, 360 20, 20 20, 190 190),
+  (90 50, 150 110, 190 50, 90 50),
   (190 50, 230 110, 290 50, 190 50))
 	</a>
       <test>
@@ -556,8 +556,8 @@ POLYGON ((190 190, 360 20, 20 20, 190 190),
    <case>
       <desc>A - holes touch in one point </desc>
       <a>
-POLYGON ((190 190, 360 20, 20 20, 190 190), 
-  (90 50, 150 110, 190 50, 90 50), 
+POLYGON ((190 190, 360 20, 20 20, 190 190),
+  (90 50, 150 110, 190 50, 90 50),
   (190 50, 230 110, 290 50, 190 50))
 	</a>
       <test>
@@ -578,8 +578,8 @@ POLYGON( (0 0, 0 5, 6 5, 6 0, 0 0), (2 1, 4 1, 3 2, 2 1), (2 1, 1 4, 5 4, 4 1, 4
    <case>
       <desc>A - one holes touches another at several vertices </desc>
       <a>
-POLYGON ((0 0, 0 5, 6 5, 6 0, 0 0), 
-  (2.5 1, 3.5 1, 3.5 2, 2.5 2, 2.5 1), 
+POLYGON ((0 0, 0 5, 6 5, 6 0, 0 0),
+  (2.5 1, 3.5 1, 3.5 2, 2.5 2, 2.5 1),
   (2.5 1.5, 1 4, 5 4, 3.5 1.5, 4 3, 3 2, 2 3, 2.5 1.5))
   </a>
       <test>
@@ -590,7 +590,7 @@ POLYGON ((0 0, 0 5, 6 5, 6 0, 0 0),
    <case>
       <desc>A - hole disconnects interiors </desc>
       <a>
-POLYGON ((0 0, 10 10, 10 0, 0 0), 
+POLYGON ((0 0, 10 10, 10 0, 0 0),
   (5 5, 5 0, 10 5, 5 5))
 	</a>
       <test>
@@ -601,8 +601,8 @@ POLYGON ((0 0, 10 10, 10 0, 0 0),
    <case>
       <desc>A - touching holes do NOT disconnect (isCCW bug) </desc>
       <a>
-POLYGON ((60 40, 60 240, 460 240, 460 40, 60 40), 
-  (260 200, 340 60, 400 120, 260 200), 
+POLYGON ((60 40, 60 240, 460 240, 460 40, 60 40),
+  (260 200, 340 60, 400 120, 260 200),
   (260 200, 120 100, 200 60, 260 200))
   	</a>
       <test>
@@ -611,11 +611,11 @@ POLYGON ((60 40, 60 240, 460 240, 460 40, 60 40),
    </case>
 
 
-  
+
   <case>
       <desc>mA - adjacent shells (shared vertices) </desc>
       <a>
-MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), 
+MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)),
   ((140 120, 40 120, 40 200, 140 200, 140 120)))
 	</a>
       <test>
@@ -628,7 +628,7 @@ MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)),
    <case>
       <desc>mA - adjacent shells (different vertices) </desc>
       <a>
-MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), 
+MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)),
   ((160 120, 60 120, 40 200, 140 200, 160 120)))
 	</a>
       <test>
@@ -641,7 +641,7 @@ MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)),
    <case>
       <desc>mA - nested overlapping shells </desc>
       <a>
-MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)), 
+MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)),
   ((120 240, 220 240, 220 140, 120 140, 120 240)))
 	</a>
       <test>
@@ -650,10 +650,20 @@ MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)),
    </case>
 
    <case>
+      <desc>mA - nested overlapping shells, one with hole </desc>
+      <a>
+MULTIPOLYGON (((110 190, 150 190, 150 150, 110 150, 110 190)), ((100 200, 200 200, 200 100, 100 100, 100 200), (160 140, 190 140, 190 110, 160 110, 160 140)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <case>
       <desc>mA - nested non-overlapping shells </desc>
       <a>
-MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320), 
-  (80 280, 80 100, 260 100, 80 280)), 
+MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320),
+  (80 280, 80 100, 260 100, 80 280)),
   ((120 160, 140 160, 140 140, 120 160)))
 	</a>
       <test>
@@ -664,8 +674,8 @@ MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320),
    <case>
       <desc>mA - nested non-overlapping shells, all vertices touch </desc>
       <a>
-MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), 
-  (220 340, 180 240, 60 200, 180 160, 340 60, 240 220, 220 340)), 
+MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
+  (220 340, 180 240, 60 200, 180 160, 340 60, 240 220, 220 340)),
   ((180 240, 180 160, 240 220, 180 240)))
 	</a>
       <test>
@@ -676,8 +686,8 @@ MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
    <case>
       <desc>mA - nested overlapping shells, all vertices touch </desc>
       <a>
-MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), 
-  (220 340, 180 240, 60 200, 140 100, 340 60, 300 240, 220 340)), 
+MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
+  (220 340, 180 240, 60 200, 140 100, 340 60, 300 240, 220 340)),
   ((60 200, 340 60, 220 340, 60 200)))
 	</a>
       <test>
@@ -688,8 +698,8 @@ MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
    <case>
       <desc>mA - nested non-overlapping shells, all vertices touch </desc>
       <a>
-MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), 
-  (220 340, 80 320, 60 200, 140 100, 340 60, 300 240, 220 340)), 
+MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
+  (220 340, 80 320, 60 200, 140 100, 340 60, 300 240, 220 340)),
   ((60 200, 340 60, 220 340, 60 200)))
 	</a>
       <test>
@@ -700,8 +710,8 @@ MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
    <case>
       <desc>mA - nested overlapping shells, all vertices touch </desc>
       <a>
-MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), 
-  (220 340, 180 240, 60 200, 200 180, 340 60, 240 220, 220 340)), 
+MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
+  (220 340, 180 240, 60 200, 200 180, 340 60, 240 220, 220 340)),
   ((60 200, 340 60, 220 340, 60 200)))
 	</a>
       <test>
@@ -712,9 +722,9 @@ MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380),
    <case>
       <desc>mA - disconnected exterior </desc>
       <a>
-MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)), 
-  ((20 100, 100 100, 100 180, 20 180, 20 100)), 
-  ((100 180, 180 180, 180 260, 100 260, 100 180)), 
+MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)),
+  ((20 100, 100 100, 100 180, 20 180, 20 100)),
+  ((100 180, 180 180, 180 260, 100 260, 100 180)),
   ((180 100, 260 100, 260 180, 180 180, 180 100)))
 	</a>
       <test>
@@ -725,7 +735,7 @@ MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)),
    <case>
       <desc>mA - shells touch in single point </desc>
       <a>
-MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), 
+MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)),
   ((110 110, 150 20, 70 20, 110 110)))
 	</a>
       <test>
@@ -736,7 +746,7 @@ MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)),
    <case>
       <desc>mA - duplicate shells </desc>
       <a>
-MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)), 
+MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)),
   ((60 300, 320 220, 260 60, 60 100, 60 300)))
 	</a>
       <test>
@@ -747,7 +757,7 @@ MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)),
    <case>
       <desc>mA - shells are not nested but share all vertices </desc>
       <a>
-MULTIPOLYGON (((180 60, 240 160, 300 60, 180 60)), 
+MULTIPOLYGON (((180 60, 240 160, 300 60, 180 60)),
   ((80 80, 180 60, 160 140, 240 160, 360 140, 300 60, 420 100, 320 280, 120 260, 80 80)))
 	</a>
       <test>
@@ -758,9 +768,9 @@ MULTIPOLYGON (((180 60, 240 160, 300 60, 180 60)),
    <case>
       <desc>mA - shell is nested inside first hole </desc>
       <a>
-MULTIPOLYGON (((0 0, 0 8, 8 8, 8 0, 0 0), 
-  (3 3, 7 3, 7 7, 3 7, 3 3), 
-  (1 1, 2 1, 2 2, 1 2, 1 1)), 
+MULTIPOLYGON (((0 0, 0 8, 8 8, 8 0, 0 0),
+  (3 3, 7 3, 7 7, 3 7, 3 3),
+  (1 1, 2 1, 2 2, 1 2, 1 1)),
   ((4 4, 4 6, 6 6, 6 4, 4 4)))
 	</a>
       <test>

-----------------------------------------------------------------------

Summary of changes:
 NEWS                                             |   2 +-
 src/operation/valid/IndexedNestedShellTester.cpp |   3 +-
 tests/xmltester/tests/general/TestValid.xml      | 148 ++++++++++++-----------
 3 files changed, 81 insertions(+), 72 deletions(-)


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list