[geos-commits] r2448 - in trunk/tests/xmltester: . tests tests/general

svn_geos at osgeo.org svn_geos at osgeo.org
Sat May 2 05:01:39 EDT 2009


Author: strk
Date: 2009-05-02 05:01:39 -0400 (Sat, 02 May 2009)
New Revision: 2448

Added:
   trunk/tests/xmltester/tests/general/
   trunk/tests/xmltester/tests/general/TestBuffer.xml
   trunk/tests/xmltester/tests/general/TestBufferMitredJoin.xml
   trunk/tests/xmltester/tests/general/TestCentroid.xml
   trunk/tests/xmltester/tests/general/TestInteriorPoint.xml
   trunk/tests/xmltester/tests/general/TestSimple.xml
   trunk/tests/xmltester/tests/general/TestValid.xml
   trunk/tests/xmltester/tests/general/TestValid2-big.xml
   trunk/tests/xmltester/tests/general/TestValid2.xml
Removed:
   trunk/tests/xmltester/tests/TestBuffer.xml
   trunk/tests/xmltester/tests/TestBufferMitredJoin.xml
   trunk/tests/xmltester/tests/TestCentroid.xml
   trunk/tests/xmltester/tests/TestInteriorPoint.xml
   trunk/tests/xmltester/tests/TestSimple.xml
   trunk/tests/xmltester/tests/TestValid.xml
   trunk/tests/xmltester/tests/TestValid2-big.xml
   trunk/tests/xmltester/tests/TestValid2.xml
Modified:
   trunk/tests/xmltester/Makefile.am
Log:
More organization of xml tests: 'general' subdir following JTS


Modified: trunk/tests/xmltester/Makefile.am
===================================================================
--- trunk/tests/xmltester/Makefile.am	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/Makefile.am	2009-05-02 09:01:39 UTC (rev 2448)
@@ -9,27 +9,27 @@
 EXTRA_DIST = testrunner.sh
 
 SAFE_XMLTESTS=$(srcdir)/tests/testLeaksBig.xml \
-	$(srcdir)/split.xml \
-	$(srcdir)/tests/TestSimple.xml \
+	$(srcdir)/tests/split.xml \
 	$(srcdir)/tests/hexwkb.xml \
 	$(srcdir)/tests/test.xml \
 	$(srcdir)/tests/linemerge.xml \
-	$(srcdir)/tests/TestInteriorPoint.xml \
-	$(srcdir)/tests/TestCentroid.xml \
 	$(srcdir)/tests/TestIsValid.xml \
-	$(srcdir)/tests/TestValid.xml \
-	$(srcdir)/tests/TestValid2.xml \
-	$(srcdir)/tests/TestValid2-big.xml \
 	$(srcdir)/tests/robustness.xml \
+	$(srcdir)/tests/general/TestCentroid.xml \
+	$(srcdir)/tests/general/TestBuffer.xml \
+	$(srcdir)/tests/general/TestBufferMitredJoin.xml \
+	$(srcdir)/tests/general/TestInteriorPoint.xml \
+	$(srcdir)/tests/general/TestSimple.xml \
+	$(srcdir)/tests/general/TestValid.xml \
+	$(srcdir)/tests/general/TestValid2.xml \
+	$(srcdir)/tests/general/TestValid2-big.xml \
 	$(srcdir)/tests/stmlf/stmlf-cases-20061020.xml \
 	$(srcdir)/tests/stmlf/stmlf-cases-20070119.xml \
 	$(srcdir)/tests/robust/TestRobustOverlayFixed.xml \
 	$(srcdir)/tests/robust/TestRobustRelate.xml \
 	$(srcdir)/tests/fme.xml \
-	$(srcdir)/tests/TestBuffer.xml \
 	$(srcdir)/tests/TestBufferExternal.xml \
 	$(srcdir)/tests/TestBufferExternal2.xml \
-	$(srcdir)/tests/TestBufferMitredJoin.xml \
 	$(srcdir)/tests/heisenbugs.xml \
 	$(srcdir)/tests/badguy3.xml \
 	$(srcdir)/tests/hole_from_shell.xml \

Deleted: trunk/tests/xmltester/tests/TestBuffer.xml
===================================================================
--- trunk/tests/xmltester/tests/TestBuffer.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestBuffer.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,119 +0,0 @@
-<run>
-  <desc>
-    Basic buffer test cases.
-  </desc>
-  <precisionModel type="FLOATING" />
-  <resultMatcher>com.vividsolutions.jtstest.testrunner.BufferResultMatcher</resultMatcher>
-
-<case>
-  <desc>
-  	Point
-  </desc>
-  <a>
-    POINT (100 100)
-  </a>
-<test><op name='buffer' arg1='A' arg2='-1.0'>   POLYGON EMPTY  </op></test>
-<test><op name='buffer' arg1='A' arg2='0.0'>    POLYGON EMPTY  </op></test>
-<test><op name='buffer' arg1='A' arg2='10.0'>   
-	POLYGON ((110 100, 109.80785280403231 98.04909677983872, 109.23879532511287 96.1731656763491, 108.31469612302546 94.44429766980397, 107.07106781186548 92.92893218813452, 105.55570233019603 91.68530387697454, 103.8268343236509 90.76120467488713, 101.95090322016128 90.19214719596769, 100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488713, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100.00000000000001, 90.19214719596769 101.9509032201613, 90.76120467488714 103.82683432365091, 91.68530387697456 105.55570233019603, 92.92893218813454 107.07106781186549, 94.44429766980399 108.31469612302547, 96.17316567634911 109.23879532511287, 98.04909677983873 109.80785280403231, 100.00000000000003 110, 101.95090322016131 109.8078528040323, 103.82683432365093 109.23879532511286, 105.55570233019606 108.31469612302544, 107.0710678118655 107.07106781186545, 108.31469612302547 105.555702330196, 109.23879532511287 103.82683432365086, 109.80785280403231 101.95090322016124, 110 100))  
-	</op></test>
-</case>
-
-<case>
-  <desc>
-  	Line
-  </desc>
-  <a>
-    LINESTRING (10 10, 100 100)
-  </a>
-<test><op name='buffer' arg1='A' arg2='-1.0'>   POLYGON EMPTY  </op></test>
-<test><op name='buffer' arg1='A' arg2='0.0'>    POLYGON EMPTY  </op></test>
-<test><op name='buffer' arg1='A' arg2='10.0'>   
-	POLYGON ((92.92893218813452 107.07106781186548, 94.44429766980397 108.31469612302546, 96.1731656763491 109.23879532511287, 98.04909677983872 109.80785280403231, 100 110, 101.95090322016128 109.80785280403231, 103.8268343236509 109.23879532511287, 105.55570233019603 108.31469612302546, 107.07106781186548 107.07106781186548, 108.31469612302546 105.55570233019603, 109.23879532511287 103.8268343236509, 109.80785280403231 101.95090322016128, 110 100, 109.80785280403231 98.04909677983872, 109.23879532511286 96.1731656763491, 108.31469612302544 94.44429766980397, 107.07106781186548 92.92893218813452, 17.071067811865476 2.9289321881345254, 15.555702330196024 1.6853038769745474, 13.826834323650898 0.7612046748871322, 11.950903220161283 0.1921471959676957, 10 0, 8.049096779838719 0.1921471959676957, 6.173165676349103 0.7612046748871322, 4.44429766980398 1.6853038769745474, 2.9289321881345254 2.9289321881345245, 1.6853038769745474 4.444297669803978, 0.7612046748871322 6.173165676349101, 0.1921471959676957 8.049096779838713, 0 9.999999999999998, 0.1921471959676957 11.950903220161283, 0.761204674887134 13.8268343236509, 1.685303876974551 15.555702330196027, 2.9289321881345254 17.071067811865476, 92.92893218813452 107.07106781186548))
-  </op></test>
-</case>
-
-<case>
-  <desc>
-  	Polygon
-  </desc>
-  <a>
-	POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))
-  </a>
-<test><op name='buffer' arg1='A' arg2='-100.0'>   POLYGON EMPTY  </op></test>
-<test><op name='buffer' arg1='A' arg2='-10.0'>   POLYGON ((110 110, 110 190, 190 190, 190 110, 110 110))  </op></test>
-<test><op name='buffer' arg1='A' arg2='0.0'>    POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))  </op></test>
-<test><op name='buffer' arg1='A' arg2='10.0'>   
-	POLYGON ((100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488714, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100, 90 200, 90.19214719596769 201.95090322016128, 90.76120467488713 203.8268343236509, 91.68530387697454 205.55570233019603, 92.92893218813452 207.07106781186548, 94.44429766980397 208.31469612302544, 96.1731656763491 209.23879532511287, 98.04909677983872 209.8078528040323, 100 210, 200 210, 201.95090322016128 209.8078528040323, 203.8268343236509 209.23879532511287, 205.55570233019603 208.31469612302544, 207.07106781186548 207.07106781186548, 208.31469612302544 205.55570233019603, 209.23879532511287 203.8268343236509, 209.8078528040323 201.95090322016128, 210 200, 210 100, 209.8078528040323 98.04909677983872, 209.23879532511287 96.1731656763491, 208.31469612302544 94.44429766980397, 207.07106781186548 92.92893218813452, 205.55570233019603 91.68530387697454, 203.8268343236509 90.76120467488713, 201.95090322016128 90.19214719596769, 200 90, 100 90))
-  </op></test>
-<test><op name='buffer' arg1='A' arg2='20.0'>   
-	POLYGON ((100 80, 96.09819355967743 80.3842943919354, 92.3463313526982 81.52240934977428, 88.88859533960796 83.37060775394909, 85.85786437626905 85.85786437626905, 83.37060775394909 88.88859533960796, 81.52240934977426 92.3463313526982, 80.38429439193538 96.09819355967743, 80 100, 80 200, 80.38429439193538 203.90180644032256, 81.52240934977426 207.6536686473018, 83.37060775394909 211.11140466039205, 85.85786437626905 214.14213562373095, 88.88859533960796 216.6293922460509, 92.3463313526982 218.47759065022575, 96.09819355967744 219.61570560806462, 100 220, 200 220, 203.90180644032256 219.61570560806462, 207.6536686473018 218.47759065022575, 211.11140466039205 216.6293922460509, 214.14213562373095 214.14213562373095, 216.6293922460509 211.11140466039205, 218.47759065022575 207.6536686473018, 219.61570560806462 203.90180644032256, 220 200, 220 100, 219.61570560806462 96.09819355967744, 218.47759065022575 92.3463313526982, 216.6293922460509 88.88859533960796, 214.14213562373095 85.85786437626905, 211.11140466039205 83.37060775394909, 207.6536686473018 81.52240934977426, 203.90180644032256 80.38429439193538, 200 80, 100 80))
-  </op></test>
-<test><op name='buffer' arg1='A' arg2='100.0'>   
-	POLYGON ((100 0, 80.49096779838713 1.921471959676964, 61.73165676349097 7.61204674887135, 44.442976698039786 16.85303876974548, 29.28932188134523 29.28932188134526, 16.853038769745453 44.44297669803981, 7.612046748871322 61.73165676349103, 1.9214719596769498 80.49096779838716, 0 100, 0 200, 1.9214719596769498 219.50903220161285, 7.612046748871322 238.268343236509, 16.853038769745467 255.55702330196021, 29.28932188134526 270.71067811865476, 44.44297669803981 283.14696123025453, 61.731656763491024 292.3879532511287, 80.49096779838717 298.078528040323, 100 300, 200 300, 219.50903220161283 298.078528040323, 238.268343236509 292.3879532511287, 255.55702330196021 283.14696123025453, 270.71067811865476 270.71067811865476, 283.14696123025453 255.55702330196021, 292.3879532511287 238.26834323650897, 298.078528040323 219.50903220161283, 300 200, 300 100, 298.078528040323 80.49096779838717, 292.3879532511287 61.731656763491024, 283.14696123025453 44.44297669803978, 270.71067811865476 29.289321881345245, 255.55702330196021 16.85303876974548, 238.268343236509 7.612046748871322, 219.50903220161283 1.9214719596769498, 200 0, 100 0))
-  </op></test>
-</case>
-
-<case>
-  <desc>
-  	Polygon
-  </desc>
-  <a>
-	POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280))
-  </a>
-<test><op name='buffer' arg1='A' arg2='-100.0'>   POLYGON EMPTY  </op></test>
-<test><op name='buffer' arg1='A' arg2='-10.0'>   
-		MULTIPOLYGON (((90 100, 90.19214719596769 98.04909677983872, 90.76120467488713 96.1731656763491, 91.68530387697454 94.44429766980397, 92.92893218813452 92.92893218813452, 94.44429766980397 91.68530387697454, 96.1731656763491 90.76120467488713, 98.04909677983872 90.19214719596769, 100 90, 90 90, 90 100)), 
-  	((260 90, 261.9509032201613 90.19214719596769, 263.82683432365087 90.76120467488713, 265.555702330196 91.68530387697454, 267.0710678118655 92.92893218813452, 268.31469612302544 94.44429766980397, 269.23879532511285 96.1731656763491, 269.8078528040323 98.04909677983872, 270 100, 270 90, 260 90)), 
-  	((270 280, 269.8078528040323 281.9509032201613, 269.23879532511285 283.82683432365087, 268.31469612302544 285.555702330196, 267.0710678118655 287.0710678118655, 265.555702330196 288.31469612302544, 263.82683432365087 289.23879532511285, 261.9509032201613 289.8078528040323, 260 290, 270 290, 270 280)), 
-  	((260 290, 258.0490967798387 289.8078528040323, 256.17316567634913 289.23879532511285, 254.44429766980397 288.31469612302544, 252.92893218813452 287.0710678118655, 180 214.14213562373095, 107.07106781186548 287.0710678118655, 105.55570233019603 288.31469612302544, 103.8268343236509 289.23879532511285, 101.95090322016128 289.8078528040323, 100 290, 260 290)), 
-  	((100 290, 98.04909677983872 289.8078528040323, 96.1731656763491 289.23879532511285, 94.44429766980397 288.31469612302544, 92.92893218813452 287.0710678118655, 91.68530387697454 285.555702330196, 90.76120467488713 283.82683432365087, 90.19214719596769 281.9509032201613, 90 280, 90 290, 100 290)))
-    </op></test>
-<test><op name='buffer' arg1='A' arg2='0.0'>    
-	POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), 
-  	(260 280, 180 200, 100 280, 100 100, 260 100, 260 280))
-  </op></test>
-<test><op name='buffer' arg1='A' arg2='10.0'>   
-	POLYGON ((70 300, 70.19214719596769 301.9509032201613, 70.76120467488713 303.82683432365087, 71.68530387697454 305.555702330196, 72.92893218813452 307.0710678118655, 74.44429766980397 308.31469612302544, 76.1731656763491 309.23879532511285, 78.04909677983872 309.8078528040323, 80 310, 280 310, 281.9509032201613 309.8078528040323, 283.82683432365087 309.23879532511285, 285.555702330196 308.31469612302544, 287.0710678118655 307.0710678118655, 288.31469612302544 305.555702330196, 289.23879532511285 303.82683432365087, 289.8078528040323 301.9509032201613, 290 300, 290 80, 289.8078528040323 78.04909677983872, 289.23879532511285 76.1731656763491, 288.31469612302544 74.44429766980397, 287.0710678118655 72.92893218813452, 285.555702330196 71.68530387697454, 283.82683432365087 70.76120467488713, 281.9509032201613 70.19214719596769, 280 70, 80 70, 78.04909677983872 70.19214719596769, 76.1731656763491 70.76120467488714, 74.44429766980397 71.68530387697454, 72.92893218813452 72.92893218813452, 71.68530387697454 74.44429766980397, 70.76120467488713 76.1731656763491, 70.19214719596769 78.04909677983872, 70 80, 70 300), 
-  	(250 255.85786437626905, 187.07106781186548 192.92893218813452, 185.55570233019603 191.68530387697456, 183.8268343236509 190.76120467488713, 181.95090322016128 190.1921471959677, 180 190, 178.04909677983872 190.1921471959677, 176.1731656763491 190.76120467488713, 174.44429766980397 191.68530387697456, 172.92893218813452 192.92893218813452, 110 255.85786437626905, 110 110, 250 110, 250 255.85786437626905))
- </op></test>
-<test><op name='buffer' arg1='A' arg2='20.0'>   
-	POLYGON ((60 300, 60.38429439193539 303.90180644032256, 61.522409349774264 307.6536686473018, 63.370607753949095 311.11140466039205, 65.85786437626905 314.14213562373095, 68.88859533960796 316.6293922460509, 72.3463313526982 318.47759065022575, 76.09819355967744 319.6157056080646, 80 320, 280 320, 283.90180644032256 319.6157056080646, 287.6536686473018 318.47759065022575, 291.11140466039205 316.6293922460509, 294.14213562373095 314.14213562373095, 296.6293922460509 311.11140466039205, 298.47759065022575 307.6536686473018, 299.6157056080646 303.90180644032256, 300 300, 300 80, 299.6157056080646 76.09819355967744, 298.47759065022575 72.3463313526982, 296.6293922460509 68.88859533960796, 294.14213562373095 65.85786437626905, 291.11140466039205 63.370607753949095, 287.6536686473018 61.522409349774264, 283.90180644032256 60.38429439193539, 280 60, 80 60, 76.09819355967743 60.3842943919354, 72.3463313526982 61.52240934977427, 68.88859533960796 63.370607753949095, 65.85786437626905 65.85786437626905, 63.37060775394909 68.88859533960796, 61.522409349774264 72.3463313526982, 60.38429439193539 76.09819355967743, 60 80, 60 300), 
-  	(240 231.7157287525381, 194.14213562373095 185.85786437626905, 191.11140466039205 183.3706077539491, 187.6536686473018 181.52240934977425, 183.90180644032256 180.38429439193538, 180 180, 176.09819355967744 180.38429439193538, 172.3463313526982 181.52240934977425, 168.88859533960795 183.3706077539491, 165.85786437626905 185.85786437626905, 120 231.7157287525381, 120 120, 240 120, 240 231.7157287525381))
-  </op></test>
-<test><op name='buffer' arg1='A' arg2='100.0'>   
-	POLYGON ((-20 300, -18.07852804032305 319.50903220161285, -12.387953251128678 338.268343236509, -3.146961230254533 355.5570233019602, 9.28932188134526 370.71067811865476, 24.442976698039807 383.14696123025453, 41.731656763491024 392.3879532511287, 60.49096779838718 398.078528040323, 80 400, 280 400, 299.50903220161285 398.078528040323, 318.268343236509 392.3879532511287, 335.5570233019602 383.14696123025453, 350.71067811865476 370.71067811865476, 363.14696123025453 355.5570233019602, 372.3879532511287 338.268343236509, 378.078528040323 319.50903220161285, 380 300, 380 80, 378.078528040323 60.490967798387175, 372.3879532511287 41.731656763491024, 363.14696123025453 24.44297669803978, 350.71067811865476 9.289321881345245, 335.5570233019602 -3.1469612302545187, 318.268343236509 -12.387953251128678, 299.50903220161285 -18.07852804032305, 280 -20, 80 -20, 60.49096779838713 -18.078528040323036, 41.73165676349097 -12.38795325112865, 24.442976698039786 -3.1469612302545187, 9.28932188134523 9.28932188134526, -3.146961230254547 24.442976698039807, -12.387953251128678 41.73165676349103, -18.07852804032305 60.49096779838716, -20 80, -20 300))
-  </op></test>
-</case>
-
-<case>
-  <desc>
-  	MultiLineString which caused failure for distance > 10 in ver 1.10
-  </desc>
-  <a>
-    MULTILINESTRING ((1335558.59524 631743.01449, 1335572.28215 631775.89056, 1335573.2578018496 631782.1915185435), 
-  (1335573.2578018496 631782.1915185435, 1335576.62035 631803.90754), 
-  (1335573.2578018496 631782.1915185435, 1335580.70187 631802.08139))
-  </a>
-<test><op name='buffer' arg1='A' arg2='10.0'>   
-POLYGON ((1335548.595256113 631743.032441783, 1335548.790905219 631744.982996921, 1335549.363329412 631746.857903442, 1335562.585102127 631778.616709872, 1335563.375568292 631783.721701512, 1335566.738116443 631805.437722968, 1335567.226524677 631807.336249059, 1335568.075932351 631809.103011783, 1335569.253697204 631810.67011544, 1335570.714558392 631811.977337115, 1335572.402375839 631812.974441013, 1335574.252287668 631813.62310899, 1335576.193202805 631813.898413099, 1335578.150532968 631813.789773558, 1335580.049059059 631813.301365323, 1335581.815821783 631812.451957649, 1335582.575762837 631811.880820023, 1335584.207062652 631811.446945214, 1335585.966840541 631810.583159534, 1335587.524288564 631809.392655618, 1335588.819554868 631807.921183865, 1335589.802863095 631806.225292108, 1335590.436425262 631804.370152517, 1335590.695893928 631802.427057067, 1335590.57129786 631800.470677824, 1335590.067425214 631798.576197348, 1335582.983023804 631779.64732263, 1335582.164383558 631774.360377032, 1335581.514060589 631772.047146558, 1335567.827150589 631739.171076558, 1335566.899949249 631737.44387026, 1335565.653602591 631735.930739755, 1335564.136007016 631734.689833799, 1335562.405482873 631733.768839712, 1335560.528533233 631733.203150781, 1335558.577288218 631733.014506113, 1335556.626733079 631733.210155219, 1335554.751826558 631733.782579411, 1335553.02462026 631734.709780751, 1335551.511489755 631735.956127409, 1335550.270583799 631737.473722984, 1335549.349589712 631739.204247127, 1335548.783900781 631741.081196768, 1335548.595256113 631743.032441783))
-  </op></test>
-<test><op name='buffer' arg1='A' arg2='15.0'>   
-POLYGON ((1335543.59526417 631743.041417674, 1335543.888737828 631745.967250381, 1335544.747374117 631748.779610163, 1335557.736578191 631779.97978481, 1335558.434451514 631784.486792996, 1335561.796999664 631806.202814452, 1335562.529612016 631809.050603588, 1335563.803723527 631811.700747674, 1335565.570370805 631814.051403159, 1335567.761662587 631816.012235673, 1335570.293388759 631817.507891519, 1335573.068256502 631818.480893485, 1335575.979629207 631818.893849648, 1335578.915624452 631818.730890336, 1335581.763413588 631817.998277984, 1335584.413557674 631816.724166473, 1335584.790893177 631816.440578026, 1335585.959658978 631816.129722821, 1335588.599325811 631814.834044301, 1335590.935497846 631813.048288427, 1335592.878397303 631810.841080797, 1335594.353359643 631808.297243162, 1335595.303702892 631805.514533776, 1335595.692905893 631802.5998906, 1335595.50601179 631799.665321737, 1335594.750202821 631796.823601022, 1335587.845634781 631778.375224674, 1335587.105500336 631773.595285547, 1335586.130015883 631770.125439837, 1335572.443105883 631737.249369837, 1335571.052303874 631734.65856039, 1335569.182783886 631732.388864632, 1335566.906390525 631730.527505698, 1335564.310604309 631729.146014568, 1335561.495179849 631728.297481171, 1335558.568312326 631728.01451417, 1335555.642479619 631728.307987828, 1335552.830119837 631729.166624117, 1335550.23931039 631730.557426126, 1335547.969614632 631732.426946114, 1335546.108255698 631734.703339476, 1335544.726764568 631737.299125691, 1335543.878231171 631740.114550151, 1335543.59526417 631743.041417674))
-  </op></test>
-</case>
-
-<case>
-  <desc>
-  	Degenerate polygon which caused error in ver 1.10
-  </desc>
-  <a>
-    POLYGON ((-69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90))
-  </a>
-<test><op name='buffer' arg1='A' arg2='0.0'>   
-POLYGON EMPTY
-  </op></test>
-</case>
-
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestBufferMitredJoin.xml
===================================================================
--- trunk/tests/xmltester/tests/TestBufferMitredJoin.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestBufferMitredJoin.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,60 +0,0 @@
-<run>
-  <desc>
-    Test cases for buffers with mitred joins.
-  </desc>
-  <precisionModel type="FLOATING" />
-  <resultMatcher>com.vividsolutions.jtstest.testrunner.BufferResultMatcher</resultMatcher>
-
-<case>
- <desc>Polygon with very close vertices  </desc>
-  <a>
-POLYGON ((588736.6028960398 4518922.914991864, 588736.1060708747 4518922.061957178, 588718.6830715544 4518930.620699637, 588712.0102834741 4518933.8985304395, 588722.7612465625 4518964.956739423, 588755.2073151038 4518948.2420851765, 588750.2892019567 4518938.490656119, 588750.2892047082 4518938.490654858, 588741.1098934844 4518920.290260831, 588736.6028960398 4518922.914991864))
-  </a>
-<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>   
-POLYGON ((588734.1297355227 4518928.603500288, 588720.8876067492 4518935.108463509, 588718.180507909 4518936.438254274, 588725.599306024 4518957.870248819, 588748.510613743 4518946.067444841, 588745.824857241 4518940.742239175, 588739.0370049385 4518927.28353524, 588734.7985587667 4518929.751873097, 588734.1297355227 4518928.603500288))
-	</op></test>
-</case>
-
-<case>
- <desc>Polygon with almost collinear segments  </desc>
-  <a>
-    POLYGON ((589300.089821923 4519627.577687806, 589296.6197410262 4519621.834087054, 589292.5450979208 4519615.089809029, 589282.7894421419 4519620.983829066, 589289.8814929381 4519632.722288636, 589300.089821923 4519627.577687806))
-  </a>
-<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>   
-POLYGON ((589293.0184401305 4519625.542333956, 589292.3401596148 4519624.419659127, 589290.8510825798 4519621.954964854, 589289.654619631 4519622.677825188, 589291.766473935 4519626.173276233, 589293.0184401305 4519625.542333956))
-	</op></test>
-</case>
-
-<case>
- <desc>Polygon with almost collinear segments  </desc>
-  <a>
-POLYGON ((588978.2942617612 4519797.499233156, 588989.1612999197 4519792.050291001, 588982.5784094566 4519779.549041149, 588962.0866377753 4519790.334848753, 588967.4026187821 4519802.960530801, 588978.2942617612 4519797.499233156))
-  </a>
-<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>   
-POLYGON ((588976.0531144794 4519793.029640461, 588982.3607149989 4519789.866888121, 588980.48352001 4519786.3019976355, 588968.47502784 4519792.622646146, 588969.9375199836 4519796.09612748, 588976.0531144794 4519793.029640461))
-	</op></test>
-</case>
-
-<case>
- <desc>Polygon with almost collinear segments  </desc>
-  <a>
-POLYGON ((589099.8017397423 4518490.719003885, 589097.1198886324 4518486.20858194, 589090.9424687021 4518475.819013388, 589069.8993093553 4518487.1362185385, 589078.7377975255 4518502.093799692, 589081.1515112884 4518509.334764771, 589103.7370954598 4518497.015419995, 589099.8017397423 4518490.719003885))
-  </a>
-<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>  
-POLYGON ((589095.5298653984 4518493.317948498, 589092.8222002359 4518488.763943842, 589089.0925332544 4518482.491158241, 589076.8521287646 4518489.074160654, 589083.3129233124 4518500.0079495255, 589084.0046933009 4518502.083060501, 589096.6851902619 4518495.166462162, 589095.5298653984 4518493.317948498)) 
-	</op></test>
-</case>
-
-<case>
- <desc>Polygon with very close vertices  </desc>
-  <a>
-POLYGON ((587854.8616905196 4519121.941123185, 587863.6671614297 4519138.176489661, 587863.9386104685 4519138.676991724, 587880.5408633598 4519129.672513268, 587871.463857397 4519112.9366913745, 587854.8616905196 4519121.941123185))
-  </a>
-<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>  
-POLYGON ((587861.6406480775 4519123.952511722, 587865.9500049312 4519131.898025201, 587873.7618842344 4519127.661136427, 587869.4524883915 4519119.715644092, 587861.6406480775 4519123.952511722))
-	</op></test>
-</case>
-
-
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestCentroid.xml
===================================================================
--- trunk/tests/xmltester/tests/TestCentroid.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestCentroid.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,149 +0,0 @@
-<run>
-  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
-
-<case>
-  <desc>P - single point</desc>
-  <a>    POINT(10 10)  </a>
-<test><op name="getCentroid" arg1="A" >    POINT(10 10)   </op></test>
-</case>
-
-<case>
-  <desc>mP - two points</desc>
-  <a>    MULTIPOINT(10 10, 20 20 )  </a>
-<test><op name="getCentroid" arg1="A" >    POINT(15 15)   </op></test>
-</case>
-
-<case>
-  <desc>mP - 4 points</desc>
-  <a>    MULTIPOINT(10 10, 20 20, 10 20, 20 10)  </a>
-<test><op name="getCentroid" arg1="A" >    POINT(15 15)   </op></test>
-</case>
-
-<case>
-  <desc>L - single segment</desc>
-  <a>    LINESTRING(10 10, 20 20)  </a>
-<test><op name="getCentroid" arg1="A" >    POINT(15 15)   </op></test>
-</case>
-
-<case>
-  <desc>L - two segments</desc>
-  <a>    LINESTRING (60 180, 120 100, 180 180)  </a>
-<test><op name="getCentroid" arg1="A" >    POINT (120 140)   </op></test>
-</case>
-
-<case>
-  <desc>L - elongated horseshoe</desc>
-  <a>    LINESTRING (80 0, 80 120, 120 120, 120 0))
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (100 69)   </op></test>
-</case>
-
-
-<case>
-  <desc>mL - two single-segment lines</desc>
-  <a>    MULTILINESTRING ((0 0, 0 100), (100 0, 100 100))  </a>
-<test><op name="getCentroid" arg1="A" >    POINT (50 50)   </op></test>
-</case>
-
-<case>
-  <desc>mL - two concentric rings, offset</desc>
-  <a>    MULTILINESTRING ((0 0, 0 200, 200 200, 200 0, 0 0), 
-  (60 180, 20 180, 20 140, 60 140, 60 180))  
-</a>
-<test><op name="getCentroid" arg1="A" >    POINT (90 110)   </op></test>
-</case>
-
-<case>
-  <desc>mL - complicated symmetrical collection of lines</desc>
-  <a>    MULTILINESTRING ((20 20, 60 60), 
-  (20 -20, 60 -60), 
-  (-20 -20, -60 -60), 
-  (-20 20, -60 60), 
-  (-80 0, 0 80, 80 0, 0 -80, -80 0), 
-  (-40 20, -40 -20), 
-  (-20 40, 20 40), 
-  (40 20, 40 -20), 
-  (20 -40, -20 -40)) </a>
-<test><op name="getCentroid" arg1="A" >    POINT (0 0)   </op></test>
-</case>
-
-<case>
-  <desc>A - box</desc>
-  <a>    POLYGON ((40 160, 160 160, 160 40, 40 40, 40 160))  </a>
-<test><op name="getCentroid" arg1="A" >    POINT (100 100)   </op></test>
-</case>
-
-<case>
-  <desc>A - box with hole</desc>
-  <a>    POLYGON ((0 200, 200 200, 200 0, 0 0, 0 200), (20 180, 80 180, 80 20, 20 20, 20 180)) </a>
-<test><op name="getCentroid" arg1="A" >    POINT (116 100)   </op></test>
-</case>
-
-<case>
-  <desc>A - box with offset hole (showing difference between area and line centroid)</desc>
-  <a>    POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), 
-  (60 180, 20 180, 20 140, 60 140, 60 180))
-	 </a>
-<test><op name="getCentroid" arg1="A" >    POINT (103 98)   </op></test>
-</case>
-
-<case>
-  <desc>A - box with 2 symmetric holes </desc>
-  <a>    POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), 
-  (60 180, 20 180, 20 140, 60 140, 60 180), 
-  (180 60, 140 60, 140 20, 180 20, 180 60))
-	 </a>
-<test><op name="getCentroid" arg1="A" >   POINT (100 100)   </op></test>
-</case>
-
-<case>
-  <desc>mA - symmetric angles</desc>
-  <a>    MULTIPOLYGON (((0 40, 0 140, 140 140, 140 120, 20 120, 20 40, 0 40)), 
-  ((0 0, 0 20, 120 20, 120 100, 140 100, 140 0, 0 0))) 
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (70 70)   </op></test>
-</case>
-
-<case>
-  <desc>GC - two adjacent polygons (showing that centroids are additive) </desc>
-  <a>    GEOMETRYCOLLECTION (POLYGON ((0 200, 20 180, 20 140, 60 140, 200 0, 0 0, 0 200)), 
-  POLYGON ((200 200, 0 200, 20 180, 60 180, 60 140, 200 0, 200 200))) 
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (103 98)   </op></test>
-</case>
-
-<case>
-  <desc>GC - heterogeneous collection of lines, points</desc>
-  <a>    GEOMETRYCOLLECTION (LINESTRING (80 0, 80 120, 120 120, 120 0), 
-  MULTIPOINT (20 60, 40 80, 60 60))
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (100 69)   </op></test>
-</case>
-
-<case>
-  <desc>GC - heterogeneous collection of polygons, line</desc>
-  <a>    GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), 
-  LINESTRING (80 0, 80 80, 120 40)) 
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (20 20)   </op></test>
-</case>
-
-<case>
-  <desc>GC - heterogeneous collection of polygons, lines, points</desc>
-  <a>    GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), 
-  LINESTRING (80 0, 80 80, 120 40), 
-  MULTIPOINT (20 60, 40 80, 60 60))
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (20 20)   </op></test>
-</case>
-
-<case>
-  <desc>GC - overlapping polygons </desc>
-  <a>    GEOMETRYCOLLECTION (POLYGON ((20 100, 20 -20, 60 -20, 60 100, 20 100)), 
-  POLYGON ((-20 60, 100 60, 100 20, -20 20, -20 60)))
-	</a>
-<test><op name="getCentroid" arg1="A" >    POINT (40 40)   </op></test>
-</case>
-
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestInteriorPoint.xml
===================================================================
--- trunk/tests/xmltester/tests/TestInteriorPoint.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestInteriorPoint.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,57 +0,0 @@
-<run>
-  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
-
-<case>
-  <desc>P - single point</desc>
-  <a>    POINT(10 10)  </a>
-<test><op name="getInteriorPoint" arg1="A" >    POINT(10 10)   </op></test>
-</case>
-
-<case>
-  <desc>P - single point</desc>
-  <a>    MULTIPOINT (60 300, 200 200, 240 240, 200 300, 40 140, 80 240, 140 240, 100 160, 140 200, 60 200)
-	</a>
-<test><op name="getInteriorPoint" arg1="A" >    POINT (140 240)   </op></test>
-</case>
-
-<case>
-  <desc>L - linestring with single segment</desc>
-  <a>    LINESTRING (0 0, 7 14)
-	</a>
-<test><op name="getInteriorPoint" arg1="A" >   POINT (7 14)   </op></test>
-</case>
-
-<case>
-  <desc>L - linestring with multiple segments </desc>
-  <a>    LINESTRING (0 0, 3 15, 6 2, 11 14, 16 5, 16 18, 2 22)
-	</a>
-<test><op name="getInteriorPoint" arg1="A" >   POINT (11 14)  </op></test>
-</case>
-
-<case>
-  <desc>mL - complex linestrings</desc>
-  <a>    MULTILINESTRING ((60 240, 140 300, 180 200, 40 140, 100 100, 120 220), 
-  (240 80, 260 160, 200 240, 180 340, 280 340, 240 180, 180 140, 40 200, 140 260))
-	</a>
-<test><op name="getInteriorPoint" arg1="A" >    POINT (180 200)   </op></test>
-</case>
-
-<case>
-  <desc>A - box</desc>
-  <a>    POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))
-	</a>
-<test><op name="getInteriorPoint" arg1="A" >    POINT (5 5)   </op></test>
-</case>
-
-<case>
-  <desc>mA - polygons with holes</desc>
-  <a>    MULTIPOLYGON (((60 320, 240 340, 260 100, 20 60, 120 180, 60 320), 
-  (200 280, 140 260, 180 160, 240 140, 200 280)), 
-  ((380 280, 300 260, 340 100, 440 80, 380 280), 
-    (380 220, 340 200, 400 100, 380 220)))
-	</a>
-<test><op name="getInteriorPoint" arg1="A" >    POINT (138 200)  </op></test>
-</case>
-
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestSimple.xml
===================================================================
--- trunk/tests/xmltester/tests/TestSimple.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestSimple.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,296 +0,0 @@
-<run>
-  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
-
-<case>
-  <desc>P - point</desc>
-  <a>
-    POINT(10 10)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mP - multipoint with repeated points</desc>
-  <a>
-    MULTIPOINT ((80 280), (80 220), (160 220), (80 220))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mP - multipoint with no repeated points</desc>
-  <a>
-    MULTIPOINT ((80 280), (80 220), (160 220))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mP - empty</desc>
-  <a>
-    MULTIPOINT EMPTY
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - simple line</desc>
-  <a>
-    LINESTRING(10 10, 20 20)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - non-simple, proper interior intersection</desc>
-  <a>
-    LINESTRING (20 60, 160 60, 80 160, 80 20)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - non-simple, interior intersection at vertices</desc>
-  <a>
-    LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - non-simple, interior intersection at Bdy/non-vertex</desc>
-  <a>
-    LINESTRING (20 60, 100 60, 60 100, 60 60)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - non-simple, interior intersection at Bdy/vertex</desc>
-  <a>
-    LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - simple, intersection at Bdy/Bdy (ring)</desc>
-  <a>
-    LINESTRING (20 20, 80 20, 80 80, 20 20)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - simple, intersection at Bdy/Bdy + non-vertex</desc>
-  <a>
-    LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80)
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>L - empty</desc>
-  <a>
-    LINESTRING EMPTY
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-
-<case>
-  <desc>mL - intersection between elements at non-vertex</desc>
-  <a>
-    MULTILINESTRING(
-  (40 140, 160 40), 
-  (160 140, 40 40))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mL - no intersection between elements</desc>
-  <a>
-    MULTILINESTRING(
-  (20 160, 20 20), 
-  (100 160, 100 20))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mL - mutual intersection at endpoints only</desc>
-  <a>
-    MULTILINESTRING ((60 140, 20 80, 60 40), 
-  (60 40, 100 80, 60 140))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mL - one element is non-simple</desc>
-  <a>
-    MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), 
-  (100 200, 200 120))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mL - proper intersection between elements at vertex</desc>
-  <a>
-    MULTILINESTRING ((40 120, 100 60), 
-  (160 120, 100 60), 
-  (40 60, 160 60))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mL - intersection between closed lines</desc>
-  <a>
-    MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), 
-  (80 160, 120 220, 120 100, 80 160))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mL - intersection between closed and open lines</desc>
-  <a>
-    MULTILINESTRING ((80 160, 40 220), 
-  (80 160, 120 220, 120 100, 80 160), 
-  (40 100, 80 160))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    false
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>A</desc>
-  <a>
-    POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>A - empty</desc>
-  <a>
-    POLYGON EMPTY
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mA</desc>
-  <a>
-    MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), 
-  ((160 380, 100 240, 20 380, 160 380), 
-    (120 340, 60 360, 80 320, 120 340)))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-<case>
-  <desc>mA - with touching elements</desc>
-  <a>
-    MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), 
-  ((160 380, 100 240, 20 380, 160 380), 
-    (120 340, 60 360, 80 320, 120 340)))
-  </a>
-<test>
-  <op name="isSimple" arg1="A">
-    true
-  </op>
-</test>
-</case>
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestValid.xml
===================================================================
--- trunk/tests/xmltester/tests/TestValid.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestValid.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,670 +0,0 @@
-<run>
-   <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
-
-   <case>
-      <desc>L - linear-ring bowtie</desc>
-      <a>LINEARRING(0 0, 100 100, 100 0, 0 100, 0 0)</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-
-   <case>
-      <desc>L - linestring bowtie</desc>
-      <a>LINESTRING(0 0, 100 100, 100 0, 0 100, 0 0)</a>
-      <test>
-         <op name="isValid" arg1="A">true</op>
-      </test>
-   </case>
-
-   <case>
-      <desc>P - point</desc>
-      <a>
-    POINT(10 10)
-  </a>
-      <test>
-         <op name="isValid" arg1="A">
-    true
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>mP - no repeated points</desc>
-      <a>
-    MULTIPOINT(10 10, 20 20, 30 30)
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    true  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>P - repeated points</desc>
-      <a>
-    MULTIPOINT(10 10, 20 20, 30 30, 10 10)
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    true  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>L - no repeated points</desc>
-      <a>
-LINESTRING (40 180, 120 120, 140 200, 200 140, 240 200)
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    true  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>L - repeated points</desc>
-      <a>
-LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    true  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>L - linestring with two identical points </desc>
-      <a>LINESTRING(0 0, 0 0)</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - zero-area polygon </desc>
-      <a>POLYGON ((0 0, 0 0, 0 0, 0 0, 0 0))</a>
-      <test>
-         <op name="isValid" arg1="A"> false </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - polygon with too few points </desc>
-      <a>POLYGON ((0 0, 10 0, 20 0, 0 0, 0 0))</a>
-      <test>
-         <op name="isValid" arg1="A"> false </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - polygon with repeated point </desc>
-      <a>POLYGON ((107 246, 107 246, 250 285, 294 137, 151 90, 15 125, 157 174, 107 246))</a>
-      <test>
-         <op name="isValid" arg1="A"> true </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - polygon with degenerate hole ring (A-B-A) </desc>
-      <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>
-      </test>
-   </case>
-
-   <case>
-      <desc>mA - multipolygon with component with too few points </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)),
-((180 100, 180 180, 180 180, 180 100)))</a>
-      <test>
-         <op name="isValid" arg1="A"> false </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - polygon self-intersects at non-vertex</desc>
-      <a>POLYGON ((0 40, 0 0, 40 40, 40 0, 0 40))</a>
-      <test>
-         <op name="isValid" arg1="A"> false </op>
-      </test>
-   </case>
-   <case>
-      <desc>A - polygon self-intersects at vertex</desc>
-      <a>MULTIPOLYGON ( ((0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40)) ) </a>
-      <test>
-         <op name="isValid" arg1="A"> false </op>
-      </test>
-   </case>
-   <case>
-      <desc>A - polygon self-intersects at vertex/non-vertex</desc>
-      <a>POLYGON ((0 40, 20 20, 40 0, 40 40, 0 0, 0 40))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - hole self-intersects at non-vertex</desc>
-      <a>POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 0 0, 40 40, 40 0, 0 40))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - polygon self-intersects at vertex</desc>
-      <a>POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - polygon self-intersects at vertex/non-vertex</desc>
-      <a>POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 0 0, 0 40))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - Valid doughnut</desc>
-      <a>POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40))</a>
-      <test>
-         <op name="isValid" arg1="A">true</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - shell has repeated points</desc>
-      <a>POLYGON ((0 60, 0 0, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40))</a>
-      <test>
-         <op name="isValid" arg1="A">true</op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - shell touches hole without crossing it (valid)</desc>
-      <a>POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 60 20, 20 40))</a>
-      <test>
-         <op name="isValid" arg1="A">true</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - shell touches hole without crossing it, but does so twice (invalid)</desc>
-      <a>POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (0 40, 20 20, 60 20, 0 40))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - hole touches hole without crossing it (valid)</desc>
-      <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, 20 100))</a>
-      <test>
-         <op name="isValid" arg1="A">true</op>
-      </test>
-   </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), 
-		(20 100, 20 40, 100 40, 80 60, 100 80, 20 100))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </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), 
-		(20 100, 20 40, 100 40, 100 80, 20 100))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - spike (invalid)</desc>
-      <a>POLYGON ((0 60, 0 0, 60 0, 60 20, 100 20, 60 20, 60 60, 0 60))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - puncture (invalid)</desc>
-      <a>POLYGON ((0 60, 0 0, 60 0, 60 20, 20 20, 60 20, 60 60, 0 60))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - hole within a hole (invalid)</desc>
-      <a>POLYGON ((0 140, 0 0, 180 0, 180 140, 0 140), (20 20, 160 20, 160 120, 20 120, 20 20), (40 100, 40 40, 140 40, 140 100, 40 100))</a>
-      <test>
-         <op name="isValid" arg1="A">false</op>
-      </test>
-   </case>
-   <case>
-      <desc>A - empty shell and holes (valid)</desc>
-      <a>POLYGON (EMPTY, EMPTY, EMPTY)</a>
-      <test>
-         <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), 
-  (140 80, 120 180, 200 180, 140 80))
-  </a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - shell self-overlaps </desc>
-      <a>
-POLYGON ((60 340, 60 100, 340 100, 340 280, 340 200, 340 340, 60 340))
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    false  </op>
-      </test>
-   </case>
-
-   <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), 
-  (70 230, 80 230, 80 220, 80 220, 70 230))  </a>
-      <test>
-         <op name="isValid" arg1="A">
-    true
-  </op>
-      </test>
-   </case>
-   <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), 
-  (180 160, 240 60, 120 60, 180 160))  </a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - hole touches shell at two points</desc>
-      <a>
-POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
-  (140 180, 40 180, 140 260, 140 180))
-  </a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - hole touches shell at one non-vertex point</desc>
-      <a>
-POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
-  (140 180, 40 180, 140 240, 140 180))
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    true  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - hole touches shell at one vertex point</desc>
-      <a>
-POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
-  (140 180, 40 260, 140 240, 140 180))
-  </a>
-      <test>
-         <op name="isValid" arg1="A">    true  </op>
-      </test>
-   </case>
-
-   <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))  
-</a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <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))  
-</a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <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))  
-</a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - hole self-intersects </desc>
-      <a>
-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>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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), 
-  (140 280, 40 80, 240 80, 140 280))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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), 
-  (140 180, 200 120, 200 240, 140 180))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - shell self-touches at vertex </desc>
-      <a>
-POLYGON ((340 320, 340 200, 200 280, 200 80, 340 200, 340 20, 60 20, 60 340, 340 320))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - shell self-touches at non-vertex </desc>
-      <a>
-POLYGON ((300 320, 300 220, 260 260, 180 220, 360 220, 360 140, 120 140, 120 320, 300 320))	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-    <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), 
-  (160 100, 220 160, 240 100, 160 100))	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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))	
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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), 
-  (300 300, 300 200, 340 260, 300 300))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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), 
-  (190 50, 230 110, 290 50, 190 50))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <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), 
-  (190 50, 230 110, 290 50, 190 50))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>A - hole disconnects interiors </desc>
-      <a>
-POLYGON ((0 0, 10 10, 10 0, 0 0), 
-  (5 5, 5 0, 10 5, 5 5))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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), 
-  (260 200, 120 100, 200 60, 260 200))
-  	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-
-  
-  <case>
-      <desc>mA - adjacent shells (shared vertices) </desc>
-      <a>
-MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), 
-  ((140 120, 40 120, 40 200, 140 200, 140 120)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>mA - adjacent shells (different vertices) </desc>
-      <a>
-MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), 
-  ((160 120, 60 120, 40 200, 140 200, 160 120)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">
-    false
-  </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>mA - nested overlapping shells </desc>
-      <a>
-MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)), 
-  ((120 240, 220 240, 220 140, 120 140, 120 240)))
-	</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)), 
-  ((120 160, 140 160, 140 140, 120 160)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <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)), 
-  ((180 240, 180 160, 240 220, 180 240)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <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)), 
-  ((60 200, 340 60, 220 340, 60 200)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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)), 
-  ((60 200, 340 60, 220 340, 60 200)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <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)), 
-  ((60 200, 340 60, 220 340, 60 200)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <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)), 
-  ((180 100, 260 100, 260 180, 180 180, 180 100)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>mA - shells touch in single point </desc>
-      <a>
-MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), 
-  ((110 110, 150 20, 70 20, 110 110)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>mA - duplicate shells </desc>
-      <a>
-MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)), 
-  ((60 300, 320 220, 260 60, 60 100, 60 300)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      false      </op>
-      </test>
-   </case>
-
-   <case>
-      <desc>mA - shells are not nested but share all vertices </desc>
-      <a>
-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>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-   <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)), 
-  ((4 4, 4 6, 6 6, 6 4, 4 4)))
-	</a>
-      <test>
-         <op name="isValid" arg1="A">      true      </op>
-      </test>
-   </case>
-
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestValid2-big.xml
===================================================================
--- trunk/tests/xmltester/tests/TestValid2-big.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestValid2-big.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,18 +0,0 @@
-<run>
-   <precisionModel type="FLOATING"/>
-<case>
-  <desc>Test 92</desc>
-  <a>
-    POLYGON ((100 100, 1000000000000000 110, 1000000000000000 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 558</desc>
-  <a>
-    MULTIPOINT (-1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 0 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-
-</run>

Deleted: trunk/tests/xmltester/tests/TestValid2.xml
===================================================================
--- trunk/tests/xmltester/tests/TestValid2.xml	2009-05-02 08:44:52 UTC (rev 2447)
+++ trunk/tests/xmltester/tests/TestValid2.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -1,5246 +0,0 @@
-<run>
-   <precisionModel type="FLOATING"/>
-<case>
-  <desc>Test 1</desc>
-  <a>
-    LINESTRING (-123456789 -40, 381039468754763 123456789)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 2</desc>
-  <a>
-    POINT (0 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 3</desc>
-  <a>
-    POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 4</desc>
-  <a>
-    POLYGON ((20 20, 140 20, 120 100, 20 100, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 5</desc>
-  <a>
-    POLYGON ((120 100, 140 20, 20 20, 20 100, 120 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 6</desc>
-  <a>
-    POLYGON ((20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 7</desc>
-  <a>
-    POLYGON ((0 0, 80 0, 80 80, 0 80, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 8</desc>
-  <a>
-    POLYGON ((100 200, 100 140, 180 140, 180 200, 100 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 9</desc>
-  <a>
-    POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 10</desc>
-  <a>
-    POLYGON ((140 120, 140 200, 240 200, 240 120, 140 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 11</desc>
-  <a>
-    POLYGON ((80 180, 140 260, 260 200, 200 60, 80 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 12</desc>
-  <a>
-    POLYGON ((240 80, 140 120, 180 240, 280 200, 240 80))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 13</desc>
-  <a>
-    POLYGON ((140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 14</desc>
-  <a>
-    POLYGON ((140 40, 180 80, 120 100, 140 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 15</desc>
-  <a>
-    POLYGON ((120 100, 180 80, 130 40, 120 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 16</desc>
-  <a>
-    POLYGON ((20 20, 180 20, 140 140, 20 140, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 17</desc>
-  <a>
-    POLYGON ((180 100, 80 200, 180 280, 260 200, 180 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 18</desc>
-  <a>
-    POLYGON ((140 140, 20 120, 0 220, 120 240, 140 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 19</desc>
-  <a>
-    POLYGON ((160 200, 210 70, 120 70, 160 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 20</desc>
-  <a>
-    POLYGON ((160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> false </op> </test>
-</case>
-<case>
-  <desc>Test 21</desc>
-  <a>
-    POLYGON ((110 140, 200 70, 200 160, 110 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 22</desc>
-  <a>
-    POLYGON ((110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> false </op> </test>
-</case>
-<case>
-  <desc>Test 23</desc>
-  <a>
-    POLYGON ((20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 24</desc>
-  <a>
-    POLYGON ((20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 25</desc>
-  <a>
-    POLYGON ((20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 26</desc>
-  <a>
-    POLYGON ((20 120, 300 120, 140 240, 20 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 27</desc>
-  <a>
-    POLYGON ((20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 28</desc>
-  <a>
-    POLYGON ((100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 29</desc>
-  <a>
-    POLYGON ((260 200, 180 80, 120 160, 200 160, 180 220, 260 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 30</desc>
-  <a>
-    POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 31</desc>
-  <a>
-    POLYGON ((0 140, 300 140, 140 240, 0 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 32</desc>
-  <a>
-    POLYGON ((20 240, 20 140, 320 140, 180 240, 20 240))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 33</desc>
-  <a>
-    POLYGON ((20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 34</desc>
-  <a>
-    POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 35</desc>
-  <a>
-    POLYGON ((120 120, 220 20, 280 20, 240 160, 120 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 36</desc>
-  <a>
-    POLYGON ((140 120, 160 20, 260 120, 220 200, 140 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 37</desc>
-  <a>
-    POLYGON ((20 140, 120 40, 20 40, 20 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 38</desc>
-  <a>
-    POLYGON ((190 140, 190 20, 140 20, 20 140, 190 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 39</desc>
-  <a>
-    POLYGON ((300 20, 220 20, 120 120, 260 160, 300 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 40</desc>
-  <a>
-    POLYGON ((140 120, 240 160, 280 60, 160 20, 140 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 41</desc>
-  <a>
-    POLYGON ((280 60, 180 60, 120 120, 260 180, 280 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 42</desc>
-  <a>
-    POLYGON ((120 200, 120 120, 40 120, 40 200, 120 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 43</desc>
-  <a>
-    POLYGON ((160 220, 140 120, 60 120, 40 220, 160 220))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 44</desc>
-  <a>
-    POLYGON ((140 120, 20 120, 20 220, 140 220, 140 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 45</desc>
-  <a>
-    POLYGON ((320 20, 220 20, 80 160, 240 140, 320 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 46</desc>
-  <a>
-    POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 47</desc>
-  <a>
-    POLYGON ((60 40, 60 140, 180 140, 180 40, 60 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 48</desc>
-  <a>
-    POLYGON ((20 20, 80 140, 160 60, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 49</desc>
-  <a>
-    POLYGON ((160 60, 20 20, 100 140, 160 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 50</desc>
-  <a>
-    POLYGON ((20 100, 140 160, 160 40, 20 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 51</desc>
-  <a>
-    POLYGON ((160 40, 20 100, 160 160, 160 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 52</desc>
-  <a>
-    POLYGON ((20 180, 180 120, 80 40, 20 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 53</desc>
-  <a>
-    POLYGON ((180 120, 100 40, 20 180, 180 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 54</desc>
-  <a>
-    POLYGON ((20 20, 140 40, 140 120, 20 160, 80 80, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 55</desc>
-  <a>
-    POLYGON ((20 20, 140 40, 140 140, 20 180, 80 100, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 56</desc>
-  <a>
-    POLYGON ((40 180, 60 100, 180 100, 200 180, 120 120, 40 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 57</desc>
-  <a>
-    POLYGON ((20 180, 60 80, 180 80, 220 180, 120 120, 20 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 58</desc>
-  <a>
-    POLYGON ((40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 59</desc>
-  <a>
-    POLYGON ((60 100, 180 100, 220 180, 120 140, 20 180, 60 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 60</desc>
-  <a>
-    POLYGON ((20 20, 20 140, 120 120, 120 40, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 61</desc>
-  <a>
-    POLYGON ((20 20, 20 180, 140 140, 140 60, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 62</desc>
-  <a>
-    POLYGON ((20 20, 120 40, 120 120, 20 140, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 63</desc>
-  <a>
-    POLYGON ((120 40, 20 20, 20 140, 120 120, 120 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 64</desc>
-  <a>
-    POLYGON ((20 20, 140 60, 140 140, 20 180, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 65</desc>
-  <a>
-    POLYGON ((140 60, 20 20, 20 180, 140 140, 140 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 66</desc>
-  <a>
-    POLYGON ((20 20, 60 120, 140 120, 180 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 67</desc>
-  <a>
-    POLYGON ((20 40, 120 40, 120 120, 20 140, 20 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 68</desc>
-  <a>
-    POLYGON ((20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 69</desc>
-  <a>
-    POLYGON ((150 150, 330 150, 250 70, 70 70, 150 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 70</desc>
-  <a>
-    POLYGON ((150 150, 270 150, 140 20, 20 20, 150 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 71</desc>
-  <a>
-    POLYGON ((150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 72</desc>
-  <a>
-    POLYGON ((150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 73</desc>
-  <a>
-    POLYGON ((20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 74</desc>
-  <a>
-    POLYGON ((190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 75</desc>
-  <a>
-    POLYGON ((70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 76</desc>
-  <a>
-    POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 77</desc>
-  <a>
-    POLYGON ((60 160, 20 200, 260 200, 220 160, 140 80, 60 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 78</desc>
-  <a>
-    POLYGON ((60 160, 20 200, 260 200, 140 80, 60 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 79</desc>
-  <a>
-    POLYGON ((20 200, 140 80, 260 200, 20 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 80</desc>
-  <a>
-    POLYGON ((20 200, 60 160, 140 80, 220 160, 260 200, 20 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 81</desc>
-  <a>
-    POLYGON ((20 200, 60 160, 140 80, 260 200, 20 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 82</desc>
-  <a>
-    POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 83</desc>
-  <a>
-    POLYGON ((100 100, 1000000 110, 10000000 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 84</desc>
-  <a>
-    POLYGON ((100 0, 100 200, 200 200, 200 0, 100 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 85</desc>
-  <a>
-    POLYGON ((120 0, 120 200, 200 200, 200 0, 120 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 86</desc>
-  <a>
-    POLYGON ((0 0, 0 200, 110 200, 110 0, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 87</desc>
-  <a>
-    POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 88</desc>
-  <a>
-    POLYGON ((100 100, 2100 110, 2100 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 89</desc>
-  <a>
-    POLYGON ((100 100, 2101 110, 2101 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 90</desc>
-  <a>
-    POLYGON ((100 100, 200 200, 200 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 91</desc>
-  <a>
-    POLYGON ((100 100, 1000000 110, 1000000 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 93</desc>
-  <a>
-    POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 94</desc>
-  <a>
-    POLYGON ((100 100, 500 110, 500 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 95</desc>
-  <a>
-    POLYGON ((100 100, 501 110, 501 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 96</desc>
-  <a>
-    POLYGON ((120 100, 130 200, 200 200, 200 100, 120 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 97</desc>
-  <a>
-    POLYGON ((120 100, 17 200, 200 200, 200 100, 120 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 98</desc>
-  <a>
-    POLYGON ((101 99, 101 1000000, 102 1000000, 101 99))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 99</desc>
-  <a>
-    POLYGON ((100 100, 200 101, 200 100, 100 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 100</desc>
-  <a>
-    POLYGON ((16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 101</desc>
-  <a>
-    POLYGON ((10 307, 22 307, 153 34, 22 34, 10 307))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 102</desc>
-  <a>
-    POLYGON ((160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 103</desc>
-  <a>
-    POLYGON ((170 120, 240 100, 260 50, 190 70, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 104</desc>
-  <a>
-    POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 105</desc>
-  <a>
-    POLYGON ((270 90, 200 50, 150 80, 210 120, 270 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 106</desc>
-  <a>
-    POLYGON ((170 120, 260 100, 240 60, 150 80, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 107</desc>
-  <a>
-    POLYGON ((220 120, 270 80, 200 60, 160 100, 220 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 108</desc>
-  <a>
-    POLYGON ((260 50, 180 70, 180 110, 260 90, 260 50))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 109</desc>
-  <a>
-    POLYGON ((230 110, 290 80, 190 60, 140 90, 230 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 110</desc>
-  <a>
-    POLYGON ((170 120, 330 120, 260 50, 100 50, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 111</desc>
-  <a>
-    POLYGON ((170 120, 330 120, 280 70, 120 70, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 112</desc>
-  <a>
-    POLYGON ((170 120, 300 120, 250 70, 120 70, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 113</desc>
-  <a>
-    POLYGON ((190 100, 310 100, 260 50, 140 50, 190 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 114</desc>
-  <a>
-    POLYGON ((280 130, 360 130, 270 40, 190 40, 280 130))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 115</desc>
-  <a>
-    POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 116</desc>
-  <a>
-    POLYGON ((220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 117</desc>
-  <a>
-    POLYGON ((260 130, 360 130, 280 40, 170 40, 260 130))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 118</desc>
-  <a>
-    POLYGON ((240 110, 340 110, 290 60, 190 60, 240 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 119</desc>
-  <a>
-    POLYGON ((250 120, 350 120, 280 50, 180 50, 250 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 120</desc>
-  <a>
-    POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 121</desc>
-  <a>
-    POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 122</desc>
-  <a>
-    POLYGON ((280 190, 330 150, 200 110, 150 150, 280 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 123</desc>
-  <a>
-    MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)), ((300 270, 420 270, 340 190, 220 190, 300 270)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 124</desc>
-  <a>
-    POLYGON ((80 190, 220 190, 140 110, 0 110, 80 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 125</desc>
-  <a>
-    POLYGON ((330 150, 200 110, 150 150, 280 190, 330 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 126</desc>
-  <a>
-    POLYGON ((290 190, 340 150, 220 120, 170 170, 290 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 127</desc>
-  <a>
-    POLYGON ((220 190, 340 190, 260 110, 140 110, 220 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 128</desc>
-  <a>
-    POLYGON ((140 190, 220 190, 100 70, 20 70, 140 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 129</desc>
-  <a>
-    POLYGON ((140 220, 60 140, 140 60, 220 140, 140 220))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 130</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)), ((180 100, 260 100, 260 180, 180 180, 180 100)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 131</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), ((110 110, 150 20, 70 20, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 132</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 133</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 134</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 135</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 136</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 137</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 138</desc>
-  <a>
-    POLYGON ((100 60, 140 100, 100 140, 60 100, 100 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 139</desc>
-  <a>
-    MULTIPOLYGON (((80 40, 120 40, 120 80, 80 80, 80 40)), ((120 80, 160 80, 160 120, 120 120, 120 80)), ((80 120, 120 120, 120 160, 80 160, 80 120)), ((40 80, 80 80, 80 120, 40 120, 40 80)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 140</desc>
-  <a>
-    LINESTRING (150 150, 40 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 141</desc>
-  <a>
-    POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 142</desc>
-  <a>
-    LINESTRING (40 40, 50 130, 130 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 143</desc>
-  <a>
-    LINESTRING (40 230, 150 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 144</desc>
-  <a>
-    LINESTRING (210 150, 330 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 145</desc>
-  <a>
-    LINESTRING (200 150, 310 150, 360 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 146</desc>
-  <a>
-    LINESTRING (180 150, 250 150, 230 250, 370 250, 410 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 147</desc>
-  <a>
-    LINESTRING (210 210, 220 150, 320 150, 370 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 148</desc>
-  <a>
-    LINESTRING (20 60, 150 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 149</desc>
-  <a>
-    LINESTRING (60 90, 310 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 150</desc>
-  <a>
-    LINESTRING (90 210, 210 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 151</desc>
-  <a>
-    LINESTRING (290 10, 130 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 152</desc>
-  <a>
-    LINESTRING (30 100, 100 100, 180 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 153</desc>
-  <a>
-    LINESTRING (20 100, 100 100, 360 100, 410 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 154</desc>
-  <a>
-    LINESTRING (90 210, 150 150, 210 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 155</desc>
-  <a>
-    LINESTRING (180 90, 280 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 156</desc>
-  <a>
-    LINESTRING (70 70, 80 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 157</desc>
-  <a>
-    LINESTRING (130 20, 150 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 158</desc>
-  <a>
-    LINESTRING (70 70, 80 20, 140 20, 150 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 159</desc>
-  <a>
-    LINESTRING (170 50, 170 20, 240 20, 260 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 160</desc>
-  <a>
-    LINESTRING (50 100, 140 190, 280 190)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 161</desc>
-  <a>
-    LINESTRING (140 60, 180 100, 290 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 162</desc>
-  <a>
-    LINESTRING (170 120, 210 80, 270 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 163</desc>
-  <a>
-    LINESTRING (170 120, 260 50)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 164</desc>
-  <a>
-    LINESTRING (190 90, 190 270)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 165</desc>
-  <a>
-    POLYGON ((190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 166</desc>
-  <a>
-    LINESTRING (60 160, 150 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 167</desc>
-  <a>
-    POLYGON ((190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 168</desc>
-  <a>
-    POLYGON ((190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 169</desc>
-  <a>
-    LINESTRING (190 90, 190 190, 190 270)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 170</desc>
-  <a>
-    LINESTRING (60 160, 110 110, 150 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 171</desc>
-  <a>
-    POLYGON ((190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 172</desc>
-  <a>
-    LINESTRING (130 110, 180 110, 190 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 173</desc>
-  <a>
-    POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 174</desc>
-  <a>
-    LINESTRING (80 110, 180 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 175</desc>
-  <a>
-    POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 176</desc>
-  <a>
-    LINESTRING (80 110, 170 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 177</desc>
-  <a>
-    POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 178</desc>
-  <a>
-    LINESTRING (80 110, 130 110, 170 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 179</desc>
-  <a>
-    LINESTRING (80 110, 130 110, 180 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 180</desc>
-  <a>
-    LINESTRING (160 70, 320 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 181</desc>
-  <a>
-    LINESTRING (160 70, 200 110, 280 190, 320 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 182</desc>
-  <a>
-    LINESTRING (70 50, 70 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 183</desc>
-  <a>
-    MULTIPOLYGON (((0 0, 0 100, 140 100, 140 0, 0 0)), ((20 170, 70 100, 130 170, 20 170)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 184</desc>
-  <a>
-    LINESTRING (110 110, 20 200, 200 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 185</desc>
-  <a>
-    POLYGON ((20 20, 200 20, 110 110, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 186</desc>
-  <a>
-    LINESTRING (150 70, 160 110, 200 60, 150 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 187</desc>
-  <a>
-    LINESTRING (80 60, 120 40, 120 70, 80 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 188</desc>
-  <a>
-    POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 189</desc>
-  <a>
-    LINESTRING (20 20, 200 20, 110 110, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 190</desc>
-  <a>
-    LINESTRING (110 90, 170 30, 50 30, 110 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 191</desc>
-  <a>
-    LINESTRING (110 110, 170 50, 170 110, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 192</desc>
-  <a>
-    LINESTRING (110 90, 70 50, 130 50, 110 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 193</desc>
-  <a>
-    LINESTRING (110 60, 20 150, 200 150, 110 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 194</desc>
-  <a>
-    LINESTRING (110 130, 110 70, 200 100, 110 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 195</desc>
-  <a>
-    LINESTRING (110 90, 160 40, 60 40, 110 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 196</desc>
-  <a>
-    LINESTRING (110 100, 40 30, 180 30, 110 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 197</desc>
-  <a>
-    POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 198</desc>
-  <a>
-    LINESTRING (110 110, 180 30, 40 30, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 199</desc>
-  <a>
-    LINESTRING (110 90, 180 30, 40 30, 110 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 200</desc>
-  <a>
-    LINESTRING (110 90, 50 30, 180 30, 110 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 201</desc>
-  <a>
-    LINESTRING (110 110, 200 200, 200 110, 110 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 202</desc>
-  <a>
-    POLYGON ((110 110, 200 20, 20 20, 110 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 203</desc>
-  <a>
-    LINESTRING (110 110, 200 200, 110 110, 20 200, 20 110, 200 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 204</desc>
-  <a>
-    LINESTRING (110 110, 20 110, 200 110, 50 110, 110 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 205</desc>
-  <a>
-    LINESTRING (110 110, 20 200, 110 200, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 206</desc>
-  <a>
-    LINESTRING (110 110, 170 50, 20 200, 20 110, 200 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 207</desc>
-  <a>
-    LINESTRING (110 110, 180 40, 110 40, 110 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 208</desc>
-  <a>
-    LINESTRING (110 60, 50 30, 170 30, 90 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 209</desc>
-  <a>
-    LINESTRING (110 110, 180 40, 110 40, 110 110, 70 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 210</desc>
-  <a>
-    LINESTRING (230 70, 170 120, 190 60, 140 60, 170 120, 270 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 211</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 210, 110 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 212</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (60 180, 60 110, 160 110, 110 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 213</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 214</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 215</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 216</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (110 60, 110 160, 200 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 217</desc>
-  <a>
-    MULTILINESTRING ((110 100, 40 30, 180 30), (170 30, 110 90, 50 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 218</desc>
-  <a>
-    MULTILINESTRING ((110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 219</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 220</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)), ((110 110, 20 200, 200 200, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 221</desc>
-  <a>
-    MULTILINESTRING ((20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 222</desc>
-  <a>
-    MULTILINESTRING ((20 110, 200 110), (110 110, 20 170, 20 130, 200 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 223</desc>
-  <a>
-    LINESTRING (0 0, 0 50, 50 50, 50 0, 0 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 224</desc>
-  <a>
-    MULTILINESTRING ((0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 225</desc>
-  <a>
-    LINESTRING (40 180, 140 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 226</desc>
-  <a>
-    MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((20 180, 20 80, 180 80, 180 180, 20 180)))
-  </a>
-  <test> <op name="isValid" arg1="A"> false </op> </test>
-</case>
-<case>
-  <desc>Test 227</desc>
-  <a>
-    MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((60 180, 60 80, 180 80, 180 180, 60 180)))
-  </a>
-  <test> <op name="isValid" arg1="A"> false </op> </test>
-</case>
-<case>
-  <desc>Test 228</desc>
-  <a>
-    LINESTRING (0 0, 60 0, 60 60, 60 0, 120 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 229</desc>
-  <a>
-    MULTILINESTRING ((0 0, 60 0), (60 0, 120 0), (60 0, 60 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 230</desc>
-  <a>
-    LINESTRING (40 40, 120 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 231</desc>
-  <a>
-    LINESTRING (40 40, 60 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 232</desc>
-  <a>
-    LINESTRING (60 240, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 233</desc>
-  <a>
-    LINESTRING (40 40, 180 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 234</desc>
-  <a>
-    LINESTRING (120 120, 20 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 235</desc>
-  <a>
-    LINESTRING (60 240, 120 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 236</desc>
-  <a>
-    LINESTRING (20 180, 140 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 237</desc>
-  <a>
-    LINESTRING (40 120, 120 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 238</desc>
-  <a>
-    LINESTRING (40 40, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 239</desc>
-  <a>
-    LINESTRING (100 100, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 240</desc>
-  <a>
-    LINESTRING (40 120, 120 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 241</desc>
-  <a>
-    LINESTRING (20 20, 180 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 242</desc>
-  <a>
-    LINESTRING (20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 243</desc>
-  <a>
-    LINESTRING (50 50, 140 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 244</desc>
-  <a>
-    LINESTRING (180 180, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 245</desc>
-  <a>
-    LINESTRING (120 120, 260 260)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 246</desc>
-  <a>
-    LINESTRING (260 260, 120 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 247</desc>
-  <a>
-    LINESTRING (40 40, 100 100, 200 120, 80 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 248</desc>
-  <a>
-    LINESTRING (40 40, 20 100, 40 160, 20 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 249</desc>
-  <a>
-    LINESTRING (20 200, 40 160, 20 100, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 250</desc>
-  <a>
-    LINESTRING (80 240, 200 120, 100 100, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 251</desc>
-  <a>
-    LINESTRING (60 60, 60 230, 140 230, 250 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 252</desc>
-  <a>
-    LINESTRING (20 20, 60 60, 250 160, 310 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 253</desc>
-  <a>
-    LINESTRING (20 20, 110 110, 200 110, 320 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 254</desc>
-  <a>
-    LINESTRING (60 110, 60 250, 360 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 255</desc>
-  <a>
-    LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 256</desc>
-  <a>
-    LINESTRING (360 210, 310 160, 110 160, 60 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 257</desc>
-  <a>
-    LINESTRING (160 160, 240 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 258</desc>
-  <a>
-    LINESTRING (240 240, 160 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 259</desc>
-  <a>
-    LINESTRING (60 150, 110 100, 170 100, 110 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 260</desc>
-  <a>
-    LINESTRING (200 120, 200 190, 150 240, 200 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 261</desc>
-  <a>
-    LINESTRING (200 240, 150 240, 200 200, 200 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 262</desc>
-  <a>
-    LINESTRING (60 230, 80 140, 120 140, 140 230)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 263</desc>
-  <a>
-    LINESTRING (60 110, 200 110, 250 160, 300 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 264</desc>
-  <a>
-    LINESTRING (60 110, 200 110, 250 160, 300 210, 360 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 265</desc>
-  <a>
-    LINESTRING (60 110, 220 110, 250 160, 280 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 266</desc>
-  <a>
-    LINESTRING (60 110, 150 110, 200 160, 250 110, 360 110, 360 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 267</desc>
-  <a>
-    LINESTRING (130 160, 160 110, 220 110, 250 160, 250 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 268</desc>
-  <a>
-    LINESTRING (130 160, 160 110, 190 110, 230 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 269</desc>
-  <a>
-    LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 270</desc>
-  <a>
-    LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 271</desc>
-  <a>
-    LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 380 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 272</desc>
-  <a>
-    LINESTRING (110 160, 160 110, 200 110, 250 160, 250 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 273</desc>
-  <a>
-    LINESTRING (110 160, 180 110, 250 160, 320 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 274</desc>
-  <a>
-    LINESTRING (140 160, 180 80, 220 160, 250 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 275</desc>
-  <a>
-    LINESTRING (40 40, 100 100, 200 120, 130 190)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 276</desc>
-  <a>
-    LINESTRING (20 130, 70 130, 160 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 277</desc>
-  <a>
-    LINESTRING (40 160, 40 100, 110 40, 170 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 278</desc>
-  <a>
-    LINESTRING (130 110, 180 160, 230 110, 280 160, 330 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 279</desc>
-  <a>
-    LINESTRING (30 140, 80 140, 100 100, 200 30)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 280</desc>
-  <a>
-    LINESTRING (110 110, 110 160, 180 110, 250 160, 250 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 281</desc>
-  <a>
-    LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 282</desc>
-  <a>
-    LINESTRING (20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 283</desc>
-  <a>
-    LINESTRING (20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 284</desc>
-  <a>
-    LINESTRING (30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 285</desc>
-  <a>
-    LINESTRING (80 240, 120 200, 200 120, 100 100, 80 80, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 286</desc>
-  <a>
-    LINESTRING (260 210, 240 130, 280 120, 260 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 287</desc>
-  <a>
-    LINESTRING (100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 288</desc>
-  <a>
-    LINESTRING (140 130, 100 110, 120 60, 170 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 289</desc>
-  <a>
-    LINESTRING (60 110, 110 160, 310 160, 360 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 290</desc>
-  <a>
-    LINESTRING (60 110, 110 160, 250 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 291</desc>
-  <a>
-    LINESTRING (110 160, 310 160, 340 190)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 292</desc>
-  <a>
-    LINESTRING (140 160, 250 160, 310 160, 340 190)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 293</desc>
-  <a>
-    LINESTRING (110 160, 250 160, 310 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 294</desc>
-  <a>
-    LINESTRING (200 120, 100 100, 40 40, 140 80, 200 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 295</desc>
-  <a>
-    LINESTRING (280 240, 240 140, 200 120, 100 100, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 296</desc>
-  <a>
-    LINESTRING (80 190, 140 140, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 297</desc>
-  <a>
-    LINESTRING (240 200, 200 260, 80 240, 140 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 298</desc>
-  <a>
-    LINESTRING (140 180, 80 240, 200 260, 240 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 299</desc>
-  <a>
-    LINESTRING (280 240, 240 140, 200 120, 80 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 300</desc>
-  <a>
-    LINESTRING (20 80, 120 80, 200 80, 260 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 301</desc>
-  <a>
-    LINESTRING (100 100, 200 120, 240 140, 280 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 302</desc>
-  <a>
-    LINESTRING (280 240, 240 140, 200 120, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 303</desc>
-  <a>
-    LINESTRING (80 20, 80 80, 240 80, 300 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 304</desc>
-  <a>
-    LINESTRING (20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 305</desc>
-  <a>
-    LINESTRING (100 100, 20 180, 180 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 306</desc>
-  <a>
-    LINESTRING (100 100, 180 20, 20 20, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 307</desc>
-  <a>
-    LINESTRING (20 100, 180 100, 100 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 308</desc>
-  <a>
-    LINESTRING (100 40, 100 160, 180 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 309</desc>
-  <a>
-    LINESTRING (20 100, 100 100, 180 100, 100 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 310</desc>
-  <a>
-    LINESTRING (100 100, 160 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 311</desc>
-  <a>
-    LINESTRING (100 100, 180 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 312</desc>
-  <a>
-    LINESTRING (60 60, 100 100, 140 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 313</desc>
-  <a>
-    LINESTRING (100 100, 190 10, 190 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 314</desc>
-  <a>
-    LINESTRING (100 100, 160 40, 160 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 315</desc>
-  <a>
-    LINESTRING (60 140, 160 40, 160 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 316</desc>
-  <a>
-    LINESTRING (20 20, 140 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 317</desc>
-  <a>
-    LINESTRING (80 80, 20 80, 140 80, 80 20, 80 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 318</desc>
-  <a>
-    LINESTRING (80 80, 20 80, 140 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 319</desc>
-  <a>
-    LINESTRING (80 80, 140 80, 80 20, 80 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 320</desc>
-  <a>
-    LINESTRING (80 80, 20 80, 140 80, 80 20, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 321</desc>
-  <a>
-    LINESTRING (80 80, 20 80, 140 80, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 322</desc>
-  <a>
-    LINESTRING (80 80, 20 80, 20 140, 140 20, 80 20, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 323</desc>
-  <a>
-    LINESTRING (20 140, 140 20, 100 20, 100 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 324</desc>
-  <a>
-    LINESTRING (140 80, 20 80, 120 80, 80 20, 80 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 325</desc>
-  <a>
-    LINESTRING (140 80, 20 80, 140 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 326</desc>
-  <a>
-    LINESTRING (140 80, 20 80, 80 140, 80 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 327</desc>
-  <a>
-    LINESTRING (140 80, 80 80, 20 80, 50 140, 50 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 328</desc>
-  <a>
-    LINESTRING (140 80, 20 80, 120 80, 80 20, 80 80, 80 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 329</desc>
-  <a>
-    LINESTRING (140 80, 20 80, 80 80, 140 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 330</desc>
-  <a>
-    LINESTRING (140 80, 20 80, 80 140, 80 80, 80 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 331</desc>
-  <a>
-    LINESTRING (130 150, 220 150, 220 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 332</desc>
-  <a>
-    LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 333</desc>
-  <a>
-    LINESTRING (30 150, 130 150, 250 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 334</desc>
-  <a>
-    LINESTRING (30 150, 250 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 335</desc>
-  <a>
-    LINESTRING (130 240, 130 20, 30 20, 130 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 336</desc>
-  <a>
-    LINESTRING (120 240, 120 20, 20 20, 120 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 337</desc>
-  <a>
-    LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 338</desc>
-  <a>
-    LINESTRING (110 110, 200 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 339</desc>
-  <a>
-    LINESTRING (20 110, 200 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 340</desc>
-  <a>
-    LINESTRING (90 200, 90 130, 110 110, 150 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 341</desc>
-  <a>
-    LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 342</desc>
-  <a>
-    LINESTRING (200 110, 110 110, 90 130, 90 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 343</desc>
-  <a>
-    LINESTRING (80 80, 150 80, 210 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 344</desc>
-  <a>
-    MULTILINESTRING ((20 20, 140 140), (20 140, 140 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 345</desc>
-  <a>
-    LINESTRING (40 80, 160 200, 260 20, 40 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 346</desc>
-  <a>
-    LINESTRING (40 80, 260 20, 160 200, 40 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 347</desc>
-  <a>
-    LINESTRING (260 20, 40 80, 160 200, 260 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 348</desc>
-  <a>
-    LINESTRING (100 140, 160 200, 260 20, 40 80, 100 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 349</desc>
-  <a>
-    LINESTRING (100 100, 180 180, 20 180, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 350</desc>
-  <a>
-    LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 351</desc>
-  <a>
-    LINESTRING (40 150, 150 40, 170 20, 170 190, 40 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 352</desc>
-  <a>
-    LINESTRING (180 100, 20 100, 100 180, 180 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 353</desc>
-  <a>
-    LINESTRING (180 180, 100 100, 20 180, 180 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 354</desc>
-  <a>
-    LINESTRING (20 180, 100 100, 20 20, 20 180)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 355</desc>
-  <a>
-    LINESTRING (100 20, 100 180, 180 100, 100 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 356</desc>
-  <a>
-    LINESTRING (170 20, 20 170, 170 170, 170 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 357</desc>
-  <a>
-    LINESTRING (40 150, 150 150, 90 210, 40 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 358</desc>
-  <a>
-    LINESTRING (20 150, 170 150, 90 230, 20 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 359</desc>
-  <a>
-    LINESTRING (40 150, 150 150, 150 40, 20 40, 20 150, 40 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 360</desc>
-  <a>
-    LINESTRING (110 110, 200 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 361</desc>
-  <a>
-    LINESTRING (200 20, 20 200, 200 200, 110 110, 110 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 362</desc>
-  <a>
-    LINESTRING (200 20, 20 200, 200 200, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 363</desc>
-  <a>
-    LINESTRING (110 110, 20 110, 110 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 364</desc>
-  <a>
-    LINESTRING (110 110, 200 200, 110 200, 200 110, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 365</desc>
-  <a>
-    LINESTRING (20 120, 120 120, 20 20, 120 20, 20 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 366</desc>
-  <a>
-    LINESTRING (170 100, 70 100, 170 170, 70 170, 170 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 367</desc>
-  <a>
-    LINESTRING (20 110, 110 110, 20 20, 110 20, 20 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 368</desc>
-  <a>
-    LINESTRING (110 160, 70 110, 60 160, 20 130, 110 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 369</desc>
-  <a>
-    LINESTRING (20 200, 200 200, 20 20, 200 20, 20 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 370</desc>
-  <a>
-    LINESTRING (20 110, 200 110, 200 160, 20 60, 20 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 371</desc>
-  <a>
-    LINESTRING (200 200, 110 110, 200 110, 110 200, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 372</desc>
-  <a>
-    LINESTRING (220 120, 120 20, 220 20, 120 120, 220 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 373</desc>
-  <a>
-    MULTILINESTRING ((70 20, 20 90, 70 170), (70 170, 120 90, 70 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 374</desc>
-  <a>
-    MULTILINESTRING ((20 20, 90 20, 170 20), (90 20, 90 80, 90 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 375</desc>
-  <a>
-    MULTILINESTRING ((90 140, 90 60, 90 20), (170 20, 130 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 376</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 377</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 378</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 379</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 380</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 381</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 382</desc>
-  <a>
-    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 383</desc>
-  <a>
-    MULTILINESTRING ((20 20, 90 90, 20 160), (90 160, 90 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 384</desc>
-  <a>
-    MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 385</desc>
-  <a>
-    MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 386</desc>
-  <a>
-    MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 90 90, 160 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 387</desc>
-  <a>
-    POINT (20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 388</desc>
-  <a>
-    POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 389</desc>
-  <a>
-    POINT (70 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 390</desc>
-  <a>
-    POLYGON ((110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 391</desc>
-  <a>
-    POINT (110 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 392</desc>
-  <a>
-    POLYGON ((20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 393</desc>
-  <a>
-    POINT (100 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 394</desc>
-  <a>
-    POLYGON ((20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 395</desc>
-  <a>
-    POLYGON ((20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150))
-  </a>
-  <test> <op name="isValid" arg1="A"> false </op> </test>
-</case>
-<case>
-  <desc>Test 396</desc>
-  <a>
-    POINT (60 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 397</desc>
-  <a>
-    POINT (110 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 398</desc>
-  <a>
-    POINT (160 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 399</desc>
-  <a>
-    POINT (100 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 400</desc>
-  <a>
-    POINT (100 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 401</desc>
-  <a>
-    POINT (60 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 402</desc>
-  <a>
-    POLYGON ((190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 403</desc>
-  <a>
-    POINT (190 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 404</desc>
-  <a>
-    POINT (190 190)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 405</desc>
-  <a>
-    POINT (360 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 406</desc>
-  <a>
-    POINT (130 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 407</desc>
-  <a>
-    POINT (280 50)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 408</desc>
-  <a>
-    POINT (150 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 409</desc>
-  <a>
-    POINT (100 50)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 410</desc>
-  <a>
-    POINT (140 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 411</desc>
-  <a>
-    POINT (190 50)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 412</desc>
-  <a>
-    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> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 413</desc>
-  <a>
-    POINT (180 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 414</desc>
-  <a>
-    POLYGON ((190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 415</desc>
-  <a>
-    MULTIPOINT (20 80, 110 160, 20 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 416</desc>
-  <a>
-    MULTIPOINT (20 80, 60 120, 20 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 417</desc>
-  <a>
-    MULTIPOINT (10 80, 110 170, 110 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 418</desc>
-  <a>
-    MULTIPOINT (10 80, 110 170, 160 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 419</desc>
-  <a>
-    MULTIPOINT (20 120, 60 120, 110 120, 160 120, 200 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 420</desc>
-  <a>
-    MULTIPOINT (60 120, 110 120, 160 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 421</desc>
-  <a>
-    MULTIPOINT (60 120, 160 120, 160 40, 60 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 422</desc>
-  <a>
-    MULTIPOINT (20 150, 60 120, 110 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 423</desc>
-  <a>
-    MULTIPOINT (110 80, 160 120, 200 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 424</desc>
-  <a>
-    MULTIPOINT (110 80, 110 120, 110 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 425</desc>
-  <a>
-    MULTIPOINT (110 170, 110 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 426</desc>
-  <a>
-    MULTIPOINT (60 120, 160 120, 110 80, 110 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 427</desc>
-  <a>
-    MULTIPOINT (90 80, 130 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 428</desc>
-  <a>
-    MULTIPOINT (60 120, 160 120, 110 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 429</desc>
-  <a>
-    MULTIPOINT (40 170, 40 90, 130 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 430</desc>
-  <a>
-    MULTIPOINT (90 170, 280 170, 190 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 431</desc>
-  <a>
-    MULTIPOINT (190 110, 150 70, 230 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 432</desc>
-  <a>
-    POINT (100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 433</desc>
-  <a>
-    MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)), ((100 180, 100 100, 180 100, 180 180, 100 180)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 434</desc>
-  <a>
-    POINT (20 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 435</desc>
-  <a>
-    POINT (60 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 436</desc>
-  <a>
-    POINT (110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 437</desc>
-  <a>
-    MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ((110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 438</desc>
-  <a>
-    POINT (110 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 439</desc>
-  <a>
-    LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 440</desc>
-  <a>
-    POINT (90 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 441</desc>
-  <a>
-    POINT (340 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 442</desc>
-  <a>
-    POINT (230 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 443</desc>
-  <a>
-    POINT (160 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 444</desc>
-  <a>
-    POINT (90 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 445</desc>
-  <a>
-    LINESTRING (150 150, 20 20, 280 20, 150 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 446</desc>
-  <a>
-    POINT (150 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 447</desc>
-  <a>
-    POINT (150 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 448</desc>
-  <a>
-    POINT (100 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 449</desc>
-  <a>
-    POINT (220 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 450</desc>
-  <a>
-    LINESTRING (110 110, 220 20, 20 20, 110 110, 220 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 451</desc>
-  <a>
-    LINESTRING (110 110, 220 20, 20 20, 220 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 452</desc>
-  <a>
-    POINT (110 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 453</desc>
-  <a>
-    POINT (220 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 454</desc>
-  <a>
-    LINESTRING (220 220, 20 20, 220 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 455</desc>
-  <a>
-    POINT (20 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 456</desc>
-  <a>
-    LINESTRING (20 200, 20 20, 110 20, 20 110, 110 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 457</desc>
-  <a>
-    POINT (20 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 458</desc>
-  <a>
-    LINESTRING (20 200, 200 20, 20 20, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 459</desc>
-  <a>
-    LINESTRING (20 200, 200 20, 140 20, 140 80, 80 140, 20 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 460</desc>
-  <a>
-    POINT (80 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 461</desc>
-  <a>
-    LINESTRING (20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 462</desc>
-  <a>
-    LINESTRING (20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 463</desc>
-  <a>
-    LINESTRING (20 200, 110 110, 200 20, 20 20, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 464</desc>
-  <a>
-    LINESTRING (20 200, 200 20, 20 20, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 465</desc>
-  <a>
-    LINESTRING (20 200, 110 110, 20 20, 200 20, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 466</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 467</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 468</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 469</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 470</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 471</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 472</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 473</desc>
-  <a>
-    LINESTRING (110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 474</desc>
-  <a>
-    LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 475</desc>
-  <a>
-    LINESTRING (200 200, 20 20, 200 20, 20 200, 110 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 476</desc>
-  <a>
-    LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 477</desc>
-  <a>
-    LINESTRING (200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 478</desc>
-  <a>
-    POINT (110 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 479</desc>
-  <a>
-    LINESTRING (110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 480</desc>
-  <a>
-    LINESTRING (110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 481</desc>
-  <a>
-    LINESTRING (110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 482</desc>
-  <a>
-    LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 483</desc>
-  <a>
-    LINESTRING (110 110, 200 200, 110 200, 110 20, 20 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 484</desc>
-  <a>
-    POINT (140 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 485</desc>
-  <a>
-    LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 486</desc>
-  <a>
-    POINT (90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 487</desc>
-  <a>
-    LINESTRING (90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 488</desc>
-  <a>
-    LINESTRING (90 130, 20 130, 20 200, 200 20, 20 20, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 489</desc>
-  <a>
-    LINESTRING (200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 490</desc>
-  <a>
-    LINESTRING (110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 491</desc>
-  <a>
-    LINESTRING (110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 492</desc>
-  <a>
-    LINESTRING (110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 493</desc>
-  <a>
-    LINESTRING (110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 494</desc>
-  <a>
-    LINESTRING (200 200, 20 20, 200 20, 20 200, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 495</desc>
-  <a>
-    LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 496</desc>
-  <a>
-    LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 497</desc>
-  <a>
-    LINESTRING (90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 498</desc>
-  <a>
-    LINESTRING (90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 499</desc>
-  <a>
-    LINESTRING (90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 500</desc>
-  <a>
-    LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 501</desc>
-  <a>
-    LINESTRING (90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 502</desc>
-  <a>
-    LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 503</desc>
-  <a>
-    POINT (110 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 504</desc>
-  <a>
-    LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 505</desc>
-  <a>
-    LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 506</desc>
-  <a>
-    MULTIPOINT (50 250, 90 220, 130 190)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 507</desc>
-  <a>
-    MULTIPOINT (180 180, 230 130, 280 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 508</desc>
-  <a>
-    MULTIPOINT (50 120, 90 80, 130 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 509</desc>
-  <a>
-    MULTIPOINT (300 280, 340 240, 380 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 510</desc>
-  <a>
-    MULTIPOINT (230 150, 260 120, 290 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 511</desc>
-  <a>
-    MULTIPOINT (200 190, 240 150, 270 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 512</desc>
-  <a>
-    MULTIPOINT (160 150, 190 120, 220 90)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 513</desc>
-  <a>
-    MULTIPOINT (120 190, 160 150, 200 110)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 514</desc>
-  <a>
-    MULTIPOINT (90 80, 160 150, 340 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 515</desc>
-  <a>
-    MULTIPOINT (90 80, 160 150, 300 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 516</desc>
-  <a>
-    MULTIPOINT (90 80, 160 150, 240 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 517</desc>
-  <a>
-    MULTIPOINT (90 80, 130 120, 210 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 518</desc>
-  <a>
-    MULTIPOINT (130 120, 210 150, 340 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 519</desc>
-  <a>
-    MULTIPOINT (160 150, 240 150, 340 210)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 520</desc>
-  <a>
-    MULTIPOINT (160 150, 300 150, 340 150)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 521</desc>
-  <a>
-    MULTIPOINT (160 150, 240 150, 340 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 522</desc>
-  <a>
-    POINT (40 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 523</desc>
-  <a>
-    POINT (40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 524</desc>
-  <a>
-    MULTIPOINT (20 20, 80 80, 20 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 525</desc>
-  <a>
-    MULTIPOINT (40 40, 80 60, 120 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 526</desc>
-  <a>
-    MULTIPOINT (40 40, 120 100, 80 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 527</desc>
-  <a>
-    MULTIPOINT (40 40, 60 100, 100 60, 120 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 528</desc>
-  <a>
-    MULTIPOINT (20 120, 60 60, 100 100, 140 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 529</desc>
-  <a>
-    MULTIPOINT (20 20, 80 70, 140 120, 200 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 530</desc>
-  <a>
-    MULTIPOINT (20 20, 140 120, 80 70, 200 170)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 531</desc>
-  <a>
-    MULTIPOINT (80 70, 20 20, 200 170, 140 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 532</desc>
-  <a>
-    MULTIPOINT (80 70, 140 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 533</desc>
-  <a>
-    MULTIPOINT (140 120, 80 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 534</desc>
-  <a>
-    MULTIPOINT (80 170, 140 120, 200 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 535</desc>
-  <a>
-    MULTIPOINT (80 170, 140 120, 200 80, 80 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 536</desc>
-  <a>
-    POINT (10 10)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 537</desc>
-  <a>
-    MULTIPOINT (10 10, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 538</desc>
-  <a>
-    LINESTRING (10 10, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 539</desc>
-  <a>
-    LINESTRING (10 10, 20 20, 20 10, 10 10)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 540</desc>
-  <a>
-    LINESTRING (40 40, 100 100, 180 100, 180 180, 100 180, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 541</desc>
-  <a>
-    MULTILINESTRING ((10 10, 20 20), (20 20, 30 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 542</desc>
-  <a>
-    MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 543</desc>
-  <a>
-    MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 544</desc>
-  <a>
-    MULTILINESTRING ((10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 545</desc>
-  <a>
-    MULTILINESTRING ((10 10, 20 20, 20 30, 30 30, 30 20, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 546</desc>
-  <a>
-    POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 547</desc>
-  <a>
-    POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 548</desc>
-  <a>
-    MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 549</desc>
-  <a>
-    POLYGON ((10 10, 100 10, 100 100, 10 100, 10 10))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 550</desc>
-  <a>
-    LINESTRING (30 220, 240 220, 240 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 551</desc>
-  <a>
-    LINESTRING (110 290, 110 100, 110 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 552</desc>
-  <a>
-    LINESTRING (120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 553</desc>
-  <a>
-    POLYGON ((200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360), (220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 554</desc>
-  <a>
-    MULTIPOINT (70 340, 70 50, 430 50, 420 340, 340 120, 390 110, 390 70, 350 100, 350 50, 370 90, 320 80, 360 120, 350 80, 390 90, 420 80, 410 60, 410 100, 370 100, 380 60, 370 80, 380 100, 360 80, 370 80, 380 70, 390 80, 390 70, 410 70, 400 60, 410 60, 410 60, 410 60, 370 70, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 555</desc>
-  <a>
-    MULTIPOINT (140 350, 510 140, 110 140, 250 290, 250 50, 300 370, 450 310, 440 160, 290 280, 220 160, 100 260, 320 230, 200 280, 360 130, 330 210, 380 80, 220 210, 380 310, 260 150, 260 110, 170 130)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 556</desc>
-  <a>
-    GEOMETRYCOLLECTION (POINT (110 300), POINT (100 110), POINT (130 210), POINT (150 210), POINT (150 180), POINT (130 170), POINT (140 190), POINT (130 200), LINESTRING (240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON ((210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340), (230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 557</desc>
-  <a>
-    MULTIPOINT (50 320, 50 280, 50 230, 50 160, 50 120, 100 120, 160 120, 210 120, 210 180, 210 150, 180 180, 140 180, 140 210, 140 260, 160 180, 140 300, 140 320, 110 320, 80 320)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 559</desc>
-  <a>
-    POLYGON ((50 50, 200 50, 200 200, 50 200, 50 50))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 560</desc>
-  <a>
-    POLYGON ((20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 561</desc>
-  <a>
-    POLYGON ((80 100, 220 100, 220 240, 80 240, 80 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 562</desc>
-  <a>
-    POLYGON ((20 340, 330 380, 50 40, 20 340))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 563</desc>
-  <a>
-    POLYGON ((210 320, 140 270, 0 270, 140 220, 210 320))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 564</desc>
-  <a>
-    POLYGON ((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 565</desc>
-  <a>
-    POLYGON ((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 566</desc>
-  <a>
-    POLYGON ((0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 567</desc>
-  <a>
-    POLYGON ((230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 568</desc>
-  <a>
-    POLYGON ((0 0, 210 0, 210 230, 0 230, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 569</desc>
-  <a>
-    MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 90, 60 60, 90 60, 90 90, 60 90)), ((70 120, 90 90, 100 120, 70 120)), ((120 70, 90 90, 120 100, 120 70)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 570</desc>
-  <a>
-    POLYGON ((0 0, 340 0, 340 300, 0 300, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 571</desc>
-  <a>
-    MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 100, 60 60, 100 60, 100 100, 60 100)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 572</desc>
-  <a>
-    POLYGON ((0 0, 120 0, 120 120, 0 120, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 573</desc>
-  <a>
-    MULTIPOLYGON (((60 20, 0 20, 60 60, 60 20)), ((60 100, 60 60, 100 60, 100 100, 60 100)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 574</desc>
-  <a>
-    POLYGON ((160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 575</desc>
-  <a>
-    POLYGON ((300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 576</desc>
-  <a>
-    MULTIPOLYGON (((120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ((360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 577</desc>
-  <a>
-    MULTIPOLYGON (((100 220, 100 200, 300 200, 300 220, 100 220)), ((280 180, 280 160, 300 160, 300 180, 280 180)), ((220 140, 220 120, 240 120, 240 140, 220 140)), ((180 220, 160 240, 200 240, 180 220)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 578</desc>
-  <a>
-    MULTIPOLYGON (((100 200, 100 180, 120 180, 120 200, 100 200)), ((60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ((280 220, 240 180, 260 160, 300 200, 280 220)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 579</desc>
-  <a>
-    MULTIPOLYGON (((80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ((220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 580</desc>
-  <a>
-    POLYGON ((60 160, 140 160, 140 60, 60 60, 60 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 581</desc>
-  <a>
-    POLYGON ((160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 582</desc>
-  <a>
-    POLYGON ((10 10, 100 10, 10 11, 10 10))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 583</desc>
-  <a>
-    POLYGON ((90 0, 200 0, 200 200, 90 200, 90 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 584</desc>
-  <a>
-    POLYGON ((100 10, 10 10, 90 11, 90 20, 100 20, 100 10))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 585</desc>
-  <a>
-    POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 586</desc>
-  <a>
-    POLYGON ((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 587</desc>
-  <a>
-    POLYGON ((60 40, 40 40, 40 20, 60 20, 60 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 588</desc>
-  <a>
-    POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 589</desc>
-  <a>
-    POLYGON ((0 30, 0 0, 30 0, 30 30, 0 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 590</desc>
-  <a>
-    MULTIPOLYGON (((0 0, 100 0, 100 20, 0 20, 0 0)), ((0 40, 0 21, 100 20, 100 40, 0 40)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 591</desc>
-  <a>
-    POLYGON ((110 30, 90 30, 90 10, 110 10, 110 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 592</desc>
-  <a>
-    POLYGON ((100 10, 0 10, 100 11, 100 10))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 593</desc>
-  <a>
-    POLYGON ((100 10, 0 10, 90 11, 90 20, 100 20, 100 10))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 594</desc>
-  <a>
-    POLYGON ((10 30, 10 0, 30 10, 30 30, 10 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 595</desc>
-  <a>
-    POLYGON ((10 30, 10 10, 30 10, 30 30, 10 30))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 596</desc>
-  <a>
-    POLYGON ((0 0, 200 0, 0 198, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 597</desc>
-  <a>
-    POLYGON ((280 60, 139 60, 280 70, 280 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 598</desc>
-  <a>
-    POLYGON ((0 0, 140 10, 0 20, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 599</desc>
-  <a>
-    POLYGON ((280 0, 139 10, 280 1, 280 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 600</desc>
-  <a>
-    MULTIPOLYGON (((1 4, 1 1, 2 1, 2 4, 1 4)), ((3 4, 3 1, 4 1, 4 4, 3 4)), ((5 4, 5 1, 6 1, 6 4, 5 4)), ((7 4, 7 1, 8 1, 8 4, 7 4)), ((9 4, 9 1, 10 1, 10 4, 9 4)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 601</desc>
-  <a>
-    POLYGON ((0 2, 11 3, 11 2, 0 2))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 602</desc>
-  <a>
-    POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 603</desc>
-  <a>
-    POLYGON ((200 160, 160 160, 160 80, 200 80, 200 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 604</desc>
-  <a>
-    LINESTRING (160 140, 160 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 605</desc>
-  <a>
-    POLYGON ((20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 606</desc>
-  <a>
-    POLYGON ((200 160, 150 160, 150 80, 200 80, 200 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 607</desc>
-  <a>
-    POLYGON ((83 33, 62 402, 68 402, 83 33))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 608</desc>
-  <a>
-    POLYGON ((78 39, 574 76, 576 60, 78 39))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 609</desc>
-  <a>
-    LINESTRING (240 190, 120 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 610</desc>
-  <a>
-    POLYGON ((110 240, 50 80, 240 70, 110 240))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 611</desc>
-  <a>
-    LINESTRING (0 100, 100 100, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 612</desc>
-  <a>
-    POLYGON ((30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 613</desc>
-  <a>
-    LINESTRING (40 340, 200 250, 120 180, 160 110, 270 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 614</desc>
-  <a>
-    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> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 615</desc>
-  <a>
-    MULTILINESTRING ((100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 616</desc>
-  <a>
-    MULTIPOLYGON (((60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ((100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 617</desc>
-  <a>
-    MULTILINESTRING ((40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 618</desc>
-  <a>
-    MULTIPOLYGON (((60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ((280 400, 320 400, 320 360, 280 360, 280 400)), ((300 240, 300 220, 320 220, 320 240, 300 240)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 619</desc>
-  <a>
-    MULTILINESTRING ((80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 620</desc>
-  <a>
-    MULTIPOLYGON (((120 180, 60 80, 180 80, 120 180)), ((100 240, 140 240, 120 220, 100 240)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 621</desc>
-  <a>
-    MULTILINESTRING ((180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 622</desc>
-  <a>
-    POLYGON ((95 9, 81 414, 87 414, 95 9))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 623</desc>
-  <a>
-    LINESTRING (93 13, 96 13)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 624</desc>
-  <a>
-    LINESTRING (0 0, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 625</desc>
-  <a>
-    LINESTRING (0 100, 100 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 626</desc>
-  <a>
-    LINESTRING (0 0, 100 100, 200 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 627</desc>
-  <a>
-    LINESTRING (0 0, 100 100, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 628</desc>
-  <a>
-    LINESTRING (40 360, 40 220, 120 360)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 629</desc>
-  <a>
-    LINESTRING (120 340, 60 220, 140 220, 140 360)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 630</desc>
-  <a>
-    LINESTRING (220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 631</desc>
-  <a>
-    LINESTRING (220 240, 140 160, 120 180, 220 280, 200 300, 100 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 632</desc>
-  <a>
-    LINESTRING (80 320, 220 320, 220 160, 80 300)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 633</desc>
-  <a>
-    LINESTRING (60 200, 60 260, 140 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 634</desc>
-  <a>
-    LINESTRING (60 200, 60 140, 140 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 635</desc>
-  <a>
-    LINESTRING (180 200, 100 280, 20 200, 100 120, 180 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 636</desc>
-  <a>
-    LINESTRING (100 200, 220 200, 220 80, 100 80, 100 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 637</desc>
-  <a>
-    LINESTRING (0 10, 620 10, 0 11)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 638</desc>
-  <a>
-    LINESTRING (400 60, 400 10)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 639</desc>
-  <a>
-    MULTIPOLYGON (((120 320, 180 200, 240 320, 120 320)), ((180 200, 240 80, 300 200, 180 200)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 640</desc>
-  <a>
-    MULTIPOINT (120 320, 180 260, 180 320, 180 200, 300 200, 200 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 641</desc>
-  <a>
-    MULTIPOLYGON (((120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ((200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 642</desc>
-  <a>
-    MULTIPOINT (200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 643</desc>
-  <a>
-    MULTIPOINT (40 90, 20 20, 70 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 644</desc>
-  <a>
-    LINESTRING (20 20, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 645</desc>
-  <a>
-    LINESTRING (20 20, 110 110, 170 50, 130 10, 70 70)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 646</desc>
-  <a>
-    MULTILINESTRING ((100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 647</desc>
-  <a>
-    MULTIPOINT (100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 648</desc>
-  <a>
-    MULTILINESTRING ((-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 649</desc>
-  <a>
-    MULTIPOINT (-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 650</desc>
-  <a>
-    MULTILINESTRING ((180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 651</desc>
-  <a>
-    POINT (200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 652</desc>
-  <a>
-    MULTIPOINT (100 100, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 653</desc>
-  <a>
-    MULTIPOINT (100 100, 200 200, 300 300, 500 500)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 654</desc>
-  <a>
-    MULTIPOINT (100 100, 200 200, 400 400, 600 600)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 655</desc>
-  <a>
-    POINT (80 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 656</desc>
-  <a>
-    POINT (260 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 657</desc>
-  <a>
-    POINT (60 260)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 658</desc>
-  <a>
-    POINT (120 260)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 659</desc>
-  <a>
-    POINT (80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 660</desc>
-  <a>
-    POINT (80 280)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 661</desc>
-  <a>
-    POLYGON ((0 0, 140 0, 140 140, 0 140, 0 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 662</desc>
-  <a>
-    POLYGON ((140 0, 0 0, 0 140, 140 140, 140 0))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 663</desc>
-  <a>
-    POLYGON ((40 60, 360 60, 360 300, 40 300, 40 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 664</desc>
-  <a>
-    POLYGON ((120 100, 280 100, 280 240, 120 240, 120 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 665</desc>
-  <a>
-    POLYGON ((80 100, 360 100, 360 280, 80 280, 80 100))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 666</desc>
-  <a>
-    POLYGON ((0 280, 0 0, 260 0, 260 280, 0 280), (220 240, 40 240, 40 40, 220 40, 220 240))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 667</desc>
-  <a>
-    POLYGON ((20 260, 240 260, 240 20, 20 20, 20 260), (160 180, 80 180, 120 120, 160 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 668</desc>
-  <a>
-    POLYGON ((60 80, 200 80, 200 220, 60 220, 60 80))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 669</desc>
-  <a>
-    POLYGON ((120 140, 260 140, 260 260, 120 260, 120 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 670</desc>
-  <a>
-    POLYGON ((60 220, 220 220, 140 140, 60 220))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 671</desc>
-  <a>
-    POLYGON ((100 180, 180 180, 180 100, 100 100, 100 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 672</desc>
-  <a>
-    POLYGON ((40 40, 180 40, 180 180, 40 180, 40 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 673</desc>
-  <a>
-    POLYGON ((180 40, 40 180, 160 280, 300 140, 180 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 674</desc>
-  <a>
-    POLYGON ((40 280, 200 280, 200 100, 40 100, 40 280), (100 220, 120 220, 120 200, 100 180, 100 220))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 675</desc>
-  <a>
-    POLYGON ((40 280, 180 260, 180 120, 60 120, 40 280))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 676</desc>
-  <a>
-    POLYGON ((0 200, 0 0, 200 0, 200 200, 0 200), (20 180, 130 180, 130 30, 20 30, 20 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 677</desc>
-  <a>
-    POLYGON ((60 90, 130 90, 130 30, 60 30, 60 90))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 678</desc>
-  <a>
-    LINESTRING (100 120, 100 240)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 679</desc>
-  <a>
-    POLYGON ((40 60, 160 60, 160 180, 40 180, 40 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 680</desc>
-  <a>
-    LINESTRING (80 80, 140 140, 200 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 681</desc>
-  <a>
-    POLYGON ((40 40, 140 40, 140 140, 40 140, 40 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 682</desc>
-  <a>
-    POLYGON ((190 190, 360 20, 20 20, 190 190), (111 110, 250 100, 140 30, 111 110))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 683</desc>
-  <a>
-    POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 131 40, 200 110, 130 180))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 684</desc>
-  <a>
-    LINESTRING (100 140, 100 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 685</desc>
-  <a>
-    MULTIPOLYGON (((20 80, 180 79, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 686</desc>
-  <a>
-    MULTIPOLYGON (((20 80, 180 80, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 687</desc>
-  <a>
-    LINESTRING (60 0, 20 80, 100 80, 80 120, 40 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 688</desc>
-  <a>
-    LINESTRING (140 300, 220 160, 260 200, 240 260)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 689</desc>
-  <a>
-    LINESTRING (60 40, 140 40, 140 160, 0 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 690</desc>
-  <a>
-    LINESTRING (140 280, 240 280, 240 180, 140 180, 140 280)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 691</desc>
-  <a>
-    LINESTRING (140 0, 0 0, 40 60, 0 120, 60 200, 220 160, 220 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 692</desc>
-  <a>
-    LINESTRING (80 140, 180 100, 160 40, 100 40, 60 100, 80 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 693</desc>
-  <a>
-    LINESTRING (20 20, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 694</desc>
-  <a>
-    LINESTRING (40 40, 160 160, 200 60, 60 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 695</desc>
-  <a>
-    LINESTRING (40 40, 200 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 696</desc>
-  <a>
-    LINESTRING (200 40, 140 40, 40 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 697</desc>
-  <a>
-    LINESTRING (0 0, 110 0, 60 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 698</desc>
-  <a>
-    LINESTRING (0 0, 110 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 699</desc>
-  <a>
-    LINESTRING (0 0, 80 0, 80 60, 80 0, 170 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 700</desc>
-  <a>
-    MULTILINESTRING ((0 0, 170 0), (80 0, 80 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 701</desc>
-  <a>
-    LINESTRING (80 100, 180 200)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 702</desc>
-  <a>
-    LINESTRING (80 180, 180 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 703</desc>
-  <a>
-    LINESTRING (40 40, 100 100, 160 160)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 704</desc>
-  <a>
-    LINESTRING (160 60, 100 100, 60 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 705</desc>
-  <a>
-    LINESTRING (140 60, 60 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 706</desc>
-  <a>
-    LINESTRING (40 40, 180 180, 100 180, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 707</desc>
-  <a>
-    LINESTRING (80 90, 50 50, 0 0)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 708</desc>
-  <a>
-    LINESTRING (40 140, 240 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 709</desc>
-  <a>
-    LINESTRING (40 140, 100 140, 80 80, 120 60, 100 140, 160 140, 160 100, 200 100, 160 140, 240 140)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 710</desc>
-  <a>
-    LINESTRING (20 20, 100 20, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 711</desc>
-  <a>
-    LINESTRING (60 20, 200 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 712</desc>
-  <a>
-    LINESTRING (40 60, 180 60, 180 140, 100 140, 100 60, 220 60, 220 180, 80 180, 80 60, 280 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 713</desc>
-  <a>
-    LINESTRING (140 60, 180 60, 220 60, 260 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 714</desc>
-  <a>
-    MULTIPOINT (0 20, 40 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 715</desc>
-  <a>
-    POLYGON ((20 40, 20 0, 60 0, 60 40, 20 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 716</desc>
-  <a>
-    MULTIPOINT (0 20, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 717</desc>
-  <a>
-    MULTIPOINT (20 20, 40 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 718</desc>
-  <a>
-    MULTIPOINT (80 260, 140 260, 180 260)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 719</desc>
-  <a>
-    POLYGON ((40 320, 140 320, 140 200, 40 200, 40 320))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 720</desc>
-  <a>
-    MULTIPOLYGON (((0 40, 0 0, 40 0, 40 40, 0 40)), ((40 80, 40 40, 80 40, 80 80, 40 80)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 721</desc>
-  <a>
-    LINESTRING (40 40, 120 120, 200 120)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 722</desc>
-  <a>
-    LINESTRING (40 40, 100 100, 160 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 723</desc>
-  <a>
-    POINT (60 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 724</desc>
-  <a>
-    MULTIPOINT (40 40, 100 40)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 725</desc>
-  <a>
-    LINESTRING (40 40, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 726</desc>
-  <a>
-    MULTIPOINT (40 40, 60 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 727</desc>
-  <a>
-    MULTIPOINT (60 60, 100 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 728</desc>
-  <a>
-    LINESTRING (40 40, 60 60, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 729</desc>
-  <a>
-    POINT (20 30)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 730</desc>
-  <a>
-    MULTIPOINT (40 40, 80 60, 40 100)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 731</desc>
-  <a>
-    MULTIPOINT (80 280, 80 220, 160 220, 80 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 732</desc>
-  <a>
-    MULTIPOINT (80 280, 80 220, 160 220)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 733</desc>
-  <a>
-    MULTIPOINT EMPTY
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 734</desc>
-  <a>
-    LINESTRING (20 60, 160 60, 80 160, 80 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 735</desc>
-  <a>
-    LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 736</desc>
-  <a>
-    LINESTRING (20 60, 100 60, 60 100, 60 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 737</desc>
-  <a>
-    LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 738</desc>
-  <a>
-    LINESTRING (20 20, 80 20, 80 80, 20 20)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 739</desc>
-  <a>
-    LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80)
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 740</desc>
-  <a>
-    LINESTRING EMPTY
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 741</desc>
-  <a>
-    MULTILINESTRING ((40 140, 160 40), (160 140, 40 40))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 742</desc>
-  <a>
-    MULTILINESTRING ((20 160, 20 20), (100 160, 100 20))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 743</desc>
-  <a>
-    MULTILINESTRING ((60 140, 20 80, 60 40), (60 40, 100 80, 60 140))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 744</desc>
-  <a>
-    MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), (100 200, 200 120))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 745</desc>
-  <a>
-    MULTILINESTRING ((40 120, 100 60), (160 120, 100 60), (40 60, 160 60))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 746</desc>
-  <a>
-    MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), (80 160, 120 220, 120 100, 80 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 747</desc>
-  <a>
-    MULTILINESTRING ((80 160, 40 220), (80 160, 120 220, 120 100, 80 160), (40 100, 80 160))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 748</desc>
-  <a>
-    POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 749</desc>
-  <a>
-    POLYGON EMPTY
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 750</desc>
-  <a>
-    MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-<case>
-  <desc>Test 751</desc>
-  <a>
-    MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340)))
-  </a>
-  <test> <op name="isValid" arg1="A"> true </op> </test>
-</case>
-</run>

Copied: trunk/tests/xmltester/tests/general/TestBuffer.xml (from rev 2417, trunk/tests/xmltester/tests/TestBuffer.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestBuffer.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestBuffer.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,119 @@
+<run>
+  <desc>
+    Basic buffer test cases.
+  </desc>
+  <precisionModel type="FLOATING" />
+  <resultMatcher>com.vividsolutions.jtstest.testrunner.BufferResultMatcher</resultMatcher>
+
+<case>
+  <desc>
+  	Point
+  </desc>
+  <a>
+    POINT (100 100)
+  </a>
+<test><op name='buffer' arg1='A' arg2='-1.0'>   POLYGON EMPTY  </op></test>
+<test><op name='buffer' arg1='A' arg2='0.0'>    POLYGON EMPTY  </op></test>
+<test><op name='buffer' arg1='A' arg2='10.0'>   
+	POLYGON ((110 100, 109.80785280403231 98.04909677983872, 109.23879532511287 96.1731656763491, 108.31469612302546 94.44429766980397, 107.07106781186548 92.92893218813452, 105.55570233019603 91.68530387697454, 103.8268343236509 90.76120467488713, 101.95090322016128 90.19214719596769, 100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488713, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100.00000000000001, 90.19214719596769 101.9509032201613, 90.76120467488714 103.82683432365091, 91.68530387697456 105.55570233019603, 92.92893218813454 107.07106781186549, 94.44429766980399 108.31469612302547, 96.17316567634911 109.23879532511287, 98.04909677983873 109.80785280403231, 100.00000000000003 110, 101.95090322016131 109.8078528040323, 103.82683432365093 109.23879532511286, 105.55570233019606 108.31469612302544, 107.0710678118655 107.07106781186545, 108.31469612302547 105.555702330196, 109.23879532511287 103.82683432365086, 109.80785280403231 101.95090322016124, 110 100))  
+	</op></test>
+</case>
+
+<case>
+  <desc>
+  	Line
+  </desc>
+  <a>
+    LINESTRING (10 10, 100 100)
+  </a>
+<test><op name='buffer' arg1='A' arg2='-1.0'>   POLYGON EMPTY  </op></test>
+<test><op name='buffer' arg1='A' arg2='0.0'>    POLYGON EMPTY  </op></test>
+<test><op name='buffer' arg1='A' arg2='10.0'>   
+	POLYGON ((92.92893218813452 107.07106781186548, 94.44429766980397 108.31469612302546, 96.1731656763491 109.23879532511287, 98.04909677983872 109.80785280403231, 100 110, 101.95090322016128 109.80785280403231, 103.8268343236509 109.23879532511287, 105.55570233019603 108.31469612302546, 107.07106781186548 107.07106781186548, 108.31469612302546 105.55570233019603, 109.23879532511287 103.8268343236509, 109.80785280403231 101.95090322016128, 110 100, 109.80785280403231 98.04909677983872, 109.23879532511286 96.1731656763491, 108.31469612302544 94.44429766980397, 107.07106781186548 92.92893218813452, 17.071067811865476 2.9289321881345254, 15.555702330196024 1.6853038769745474, 13.826834323650898 0.7612046748871322, 11.950903220161283 0.1921471959676957, 10 0, 8.049096779838719 0.1921471959676957, 6.173165676349103 0.7612046748871322, 4.44429766980398 1.6853038769745474, 2.9289321881345254 2.9289321881345245, 1.6853038769745474 4.444297669803978, 0.7612046748871322 6.173165676349101, 0.1921471959676957 8.049096779838713, 0 9.999999999999998, 0.1921471959676957 11.950903220161283, 0.761204674887134 13.8268343236509, 1.685303876974551 15.555702330196027, 2.9289321881345254 17.071067811865476, 92.92893218813452 107.07106781186548))
+  </op></test>
+</case>
+
+<case>
+  <desc>
+  	Polygon
+  </desc>
+  <a>
+	POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))
+  </a>
+<test><op name='buffer' arg1='A' arg2='-100.0'>   POLYGON EMPTY  </op></test>
+<test><op name='buffer' arg1='A' arg2='-10.0'>   POLYGON ((110 110, 110 190, 190 190, 190 110, 110 110))  </op></test>
+<test><op name='buffer' arg1='A' arg2='0.0'>    POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))  </op></test>
+<test><op name='buffer' arg1='A' arg2='10.0'>   
+	POLYGON ((100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488714, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100, 90 200, 90.19214719596769 201.95090322016128, 90.76120467488713 203.8268343236509, 91.68530387697454 205.55570233019603, 92.92893218813452 207.07106781186548, 94.44429766980397 208.31469612302544, 96.1731656763491 209.23879532511287, 98.04909677983872 209.8078528040323, 100 210, 200 210, 201.95090322016128 209.8078528040323, 203.8268343236509 209.23879532511287, 205.55570233019603 208.31469612302544, 207.07106781186548 207.07106781186548, 208.31469612302544 205.55570233019603, 209.23879532511287 203.8268343236509, 209.8078528040323 201.95090322016128, 210 200, 210 100, 209.8078528040323 98.04909677983872, 209.23879532511287 96.1731656763491, 208.31469612302544 94.44429766980397, 207.07106781186548 92.92893218813452, 205.55570233019603 91.68530387697454, 203.8268343236509 90.76120467488713, 201.95090322016128 90.19214719596769, 200 90, 100 90))
+  </op></test>
+<test><op name='buffer' arg1='A' arg2='20.0'>   
+	POLYGON ((100 80, 96.09819355967743 80.3842943919354, 92.3463313526982 81.52240934977428, 88.88859533960796 83.37060775394909, 85.85786437626905 85.85786437626905, 83.37060775394909 88.88859533960796, 81.52240934977426 92.3463313526982, 80.38429439193538 96.09819355967743, 80 100, 80 200, 80.38429439193538 203.90180644032256, 81.52240934977426 207.6536686473018, 83.37060775394909 211.11140466039205, 85.85786437626905 214.14213562373095, 88.88859533960796 216.6293922460509, 92.3463313526982 218.47759065022575, 96.09819355967744 219.61570560806462, 100 220, 200 220, 203.90180644032256 219.61570560806462, 207.6536686473018 218.47759065022575, 211.11140466039205 216.6293922460509, 214.14213562373095 214.14213562373095, 216.6293922460509 211.11140466039205, 218.47759065022575 207.6536686473018, 219.61570560806462 203.90180644032256, 220 200, 220 100, 219.61570560806462 96.09819355967744, 218.47759065022575 92.3463313526982, 216.6293922460509 88.88859533960796, 214.14213562373095 85.85786437626905, 211.11140466039205 83.37060775394909, 207.6536686473018 81.52240934977426, 203.90180644032256 80.38429439193538, 200 80, 100 80))
+  </op></test>
+<test><op name='buffer' arg1='A' arg2='100.0'>   
+	POLYGON ((100 0, 80.49096779838713 1.921471959676964, 61.73165676349097 7.61204674887135, 44.442976698039786 16.85303876974548, 29.28932188134523 29.28932188134526, 16.853038769745453 44.44297669803981, 7.612046748871322 61.73165676349103, 1.9214719596769498 80.49096779838716, 0 100, 0 200, 1.9214719596769498 219.50903220161285, 7.612046748871322 238.268343236509, 16.853038769745467 255.55702330196021, 29.28932188134526 270.71067811865476, 44.44297669803981 283.14696123025453, 61.731656763491024 292.3879532511287, 80.49096779838717 298.078528040323, 100 300, 200 300, 219.50903220161283 298.078528040323, 238.268343236509 292.3879532511287, 255.55702330196021 283.14696123025453, 270.71067811865476 270.71067811865476, 283.14696123025453 255.55702330196021, 292.3879532511287 238.26834323650897, 298.078528040323 219.50903220161283, 300 200, 300 100, 298.078528040323 80.49096779838717, 292.3879532511287 61.731656763491024, 283.14696123025453 44.44297669803978, 270.71067811865476 29.289321881345245, 255.55702330196021 16.85303876974548, 238.268343236509 7.612046748871322, 219.50903220161283 1.9214719596769498, 200 0, 100 0))
+  </op></test>
+</case>
+
+<case>
+  <desc>
+  	Polygon
+  </desc>
+  <a>
+	POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280))
+  </a>
+<test><op name='buffer' arg1='A' arg2='-100.0'>   POLYGON EMPTY  </op></test>
+<test><op name='buffer' arg1='A' arg2='-10.0'>   
+		MULTIPOLYGON (((90 100, 90.19214719596769 98.04909677983872, 90.76120467488713 96.1731656763491, 91.68530387697454 94.44429766980397, 92.92893218813452 92.92893218813452, 94.44429766980397 91.68530387697454, 96.1731656763491 90.76120467488713, 98.04909677983872 90.19214719596769, 100 90, 90 90, 90 100)), 
+  	((260 90, 261.9509032201613 90.19214719596769, 263.82683432365087 90.76120467488713, 265.555702330196 91.68530387697454, 267.0710678118655 92.92893218813452, 268.31469612302544 94.44429766980397, 269.23879532511285 96.1731656763491, 269.8078528040323 98.04909677983872, 270 100, 270 90, 260 90)), 
+  	((270 280, 269.8078528040323 281.9509032201613, 269.23879532511285 283.82683432365087, 268.31469612302544 285.555702330196, 267.0710678118655 287.0710678118655, 265.555702330196 288.31469612302544, 263.82683432365087 289.23879532511285, 261.9509032201613 289.8078528040323, 260 290, 270 290, 270 280)), 
+  	((260 290, 258.0490967798387 289.8078528040323, 256.17316567634913 289.23879532511285, 254.44429766980397 288.31469612302544, 252.92893218813452 287.0710678118655, 180 214.14213562373095, 107.07106781186548 287.0710678118655, 105.55570233019603 288.31469612302544, 103.8268343236509 289.23879532511285, 101.95090322016128 289.8078528040323, 100 290, 260 290)), 
+  	((100 290, 98.04909677983872 289.8078528040323, 96.1731656763491 289.23879532511285, 94.44429766980397 288.31469612302544, 92.92893218813452 287.0710678118655, 91.68530387697454 285.555702330196, 90.76120467488713 283.82683432365087, 90.19214719596769 281.9509032201613, 90 280, 90 290, 100 290)))
+    </op></test>
+<test><op name='buffer' arg1='A' arg2='0.0'>    
+	POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), 
+  	(260 280, 180 200, 100 280, 100 100, 260 100, 260 280))
+  </op></test>
+<test><op name='buffer' arg1='A' arg2='10.0'>   
+	POLYGON ((70 300, 70.19214719596769 301.9509032201613, 70.76120467488713 303.82683432365087, 71.68530387697454 305.555702330196, 72.92893218813452 307.0710678118655, 74.44429766980397 308.31469612302544, 76.1731656763491 309.23879532511285, 78.04909677983872 309.8078528040323, 80 310, 280 310, 281.9509032201613 309.8078528040323, 283.82683432365087 309.23879532511285, 285.555702330196 308.31469612302544, 287.0710678118655 307.0710678118655, 288.31469612302544 305.555702330196, 289.23879532511285 303.82683432365087, 289.8078528040323 301.9509032201613, 290 300, 290 80, 289.8078528040323 78.04909677983872, 289.23879532511285 76.1731656763491, 288.31469612302544 74.44429766980397, 287.0710678118655 72.92893218813452, 285.555702330196 71.68530387697454, 283.82683432365087 70.76120467488713, 281.9509032201613 70.19214719596769, 280 70, 80 70, 78.04909677983872 70.19214719596769, 76.1731656763491 70.76120467488714, 74.44429766980397 71.68530387697454, 72.92893218813452 72.92893218813452, 71.68530387697454 74.44429766980397, 70.76120467488713 76.1731656763491, 70.19214719596769 78.04909677983872, 70 80, 70 300), 
+  	(250 255.85786437626905, 187.07106781186548 192.92893218813452, 185.55570233019603 191.68530387697456, 183.8268343236509 190.76120467488713, 181.95090322016128 190.1921471959677, 180 190, 178.04909677983872 190.1921471959677, 176.1731656763491 190.76120467488713, 174.44429766980397 191.68530387697456, 172.92893218813452 192.92893218813452, 110 255.85786437626905, 110 110, 250 110, 250 255.85786437626905))
+ </op></test>
+<test><op name='buffer' arg1='A' arg2='20.0'>   
+	POLYGON ((60 300, 60.38429439193539 303.90180644032256, 61.522409349774264 307.6536686473018, 63.370607753949095 311.11140466039205, 65.85786437626905 314.14213562373095, 68.88859533960796 316.6293922460509, 72.3463313526982 318.47759065022575, 76.09819355967744 319.6157056080646, 80 320, 280 320, 283.90180644032256 319.6157056080646, 287.6536686473018 318.47759065022575, 291.11140466039205 316.6293922460509, 294.14213562373095 314.14213562373095, 296.6293922460509 311.11140466039205, 298.47759065022575 307.6536686473018, 299.6157056080646 303.90180644032256, 300 300, 300 80, 299.6157056080646 76.09819355967744, 298.47759065022575 72.3463313526982, 296.6293922460509 68.88859533960796, 294.14213562373095 65.85786437626905, 291.11140466039205 63.370607753949095, 287.6536686473018 61.522409349774264, 283.90180644032256 60.38429439193539, 280 60, 80 60, 76.09819355967743 60.3842943919354, 72.3463313526982 61.52240934977427, 68.88859533960796 63.370607753949095, 65.85786437626905 65.85786437626905, 63.37060775394909 68.88859533960796, 61.522409349774264 72.3463313526982, 60.38429439193539 76.09819355967743, 60 80, 60 300), 
+  	(240 231.7157287525381, 194.14213562373095 185.85786437626905, 191.11140466039205 183.3706077539491, 187.6536686473018 181.52240934977425, 183.90180644032256 180.38429439193538, 180 180, 176.09819355967744 180.38429439193538, 172.3463313526982 181.52240934977425, 168.88859533960795 183.3706077539491, 165.85786437626905 185.85786437626905, 120 231.7157287525381, 120 120, 240 120, 240 231.7157287525381))
+  </op></test>
+<test><op name='buffer' arg1='A' arg2='100.0'>   
+	POLYGON ((-20 300, -18.07852804032305 319.50903220161285, -12.387953251128678 338.268343236509, -3.146961230254533 355.5570233019602, 9.28932188134526 370.71067811865476, 24.442976698039807 383.14696123025453, 41.731656763491024 392.3879532511287, 60.49096779838718 398.078528040323, 80 400, 280 400, 299.50903220161285 398.078528040323, 318.268343236509 392.3879532511287, 335.5570233019602 383.14696123025453, 350.71067811865476 370.71067811865476, 363.14696123025453 355.5570233019602, 372.3879532511287 338.268343236509, 378.078528040323 319.50903220161285, 380 300, 380 80, 378.078528040323 60.490967798387175, 372.3879532511287 41.731656763491024, 363.14696123025453 24.44297669803978, 350.71067811865476 9.289321881345245, 335.5570233019602 -3.1469612302545187, 318.268343236509 -12.387953251128678, 299.50903220161285 -18.07852804032305, 280 -20, 80 -20, 60.49096779838713 -18.078528040323036, 41.73165676349097 -12.38795325112865, 24.442976698039786 -3.1469612302545187, 9.28932188134523 9.28932188134526, -3.146961230254547 24.442976698039807, -12.387953251128678 41.73165676349103, -18.07852804032305 60.49096779838716, -20 80, -20 300))
+  </op></test>
+</case>
+
+<case>
+  <desc>
+  	MultiLineString which caused failure for distance > 10 in ver 1.10
+  </desc>
+  <a>
+    MULTILINESTRING ((1335558.59524 631743.01449, 1335572.28215 631775.89056, 1335573.2578018496 631782.1915185435), 
+  (1335573.2578018496 631782.1915185435, 1335576.62035 631803.90754), 
+  (1335573.2578018496 631782.1915185435, 1335580.70187 631802.08139))
+  </a>
+<test><op name='buffer' arg1='A' arg2='10.0'>   
+POLYGON ((1335548.595256113 631743.032441783, 1335548.790905219 631744.982996921, 1335549.363329412 631746.857903442, 1335562.585102127 631778.616709872, 1335563.375568292 631783.721701512, 1335566.738116443 631805.437722968, 1335567.226524677 631807.336249059, 1335568.075932351 631809.103011783, 1335569.253697204 631810.67011544, 1335570.714558392 631811.977337115, 1335572.402375839 631812.974441013, 1335574.252287668 631813.62310899, 1335576.193202805 631813.898413099, 1335578.150532968 631813.789773558, 1335580.049059059 631813.301365323, 1335581.815821783 631812.451957649, 1335582.575762837 631811.880820023, 1335584.207062652 631811.446945214, 1335585.966840541 631810.583159534, 1335587.524288564 631809.392655618, 1335588.819554868 631807.921183865, 1335589.802863095 631806.225292108, 1335590.436425262 631804.370152517, 1335590.695893928 631802.427057067, 1335590.57129786 631800.470677824, 1335590.067425214 631798.576197348, 1335582.983023804 631779.64732263, 1335582.164383558 631774.360377032, 1335581.514060589 631772.047146558, 1335567.827150589 631739.171076558, 1335566.899949249 631737.44387026, 1335565.653602591 631735.930739755, 1335564.136007016 631734.689833799, 1335562.405482873 631733.768839712, 1335560.528533233 631733.203150781, 1335558.577288218 631733.014506113, 1335556.626733079 631733.210155219, 1335554.751826558 631733.782579411, 1335553.02462026 631734.709780751, 1335551.511489755 631735.956127409, 1335550.270583799 631737.473722984, 1335549.349589712 631739.204247127, 1335548.783900781 631741.081196768, 1335548.595256113 631743.032441783))
+  </op></test>
+<test><op name='buffer' arg1='A' arg2='15.0'>   
+POLYGON ((1335543.59526417 631743.041417674, 1335543.888737828 631745.967250381, 1335544.747374117 631748.779610163, 1335557.736578191 631779.97978481, 1335558.434451514 631784.486792996, 1335561.796999664 631806.202814452, 1335562.529612016 631809.050603588, 1335563.803723527 631811.700747674, 1335565.570370805 631814.051403159, 1335567.761662587 631816.012235673, 1335570.293388759 631817.507891519, 1335573.068256502 631818.480893485, 1335575.979629207 631818.893849648, 1335578.915624452 631818.730890336, 1335581.763413588 631817.998277984, 1335584.413557674 631816.724166473, 1335584.790893177 631816.440578026, 1335585.959658978 631816.129722821, 1335588.599325811 631814.834044301, 1335590.935497846 631813.048288427, 1335592.878397303 631810.841080797, 1335594.353359643 631808.297243162, 1335595.303702892 631805.514533776, 1335595.692905893 631802.5998906, 1335595.50601179 631799.665321737, 1335594.750202821 631796.823601022, 1335587.845634781 631778.375224674, 1335587.105500336 631773.595285547, 1335586.130015883 631770.125439837, 1335572.443105883 631737.249369837, 1335571.052303874 631734.65856039, 1335569.182783886 631732.388864632, 1335566.906390525 631730.527505698, 1335564.310604309 631729.146014568, 1335561.495179849 631728.297481171, 1335558.568312326 631728.01451417, 1335555.642479619 631728.307987828, 1335552.830119837 631729.166624117, 1335550.23931039 631730.557426126, 1335547.969614632 631732.426946114, 1335546.108255698 631734.703339476, 1335544.726764568 631737.299125691, 1335543.878231171 631740.114550151, 1335543.59526417 631743.041417674))
+  </op></test>
+</case>
+
+<case>
+  <desc>
+  	Degenerate polygon which caused error in ver 1.10
+  </desc>
+  <a>
+    POLYGON ((-69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90))
+  </a>
+<test><op name='buffer' arg1='A' arg2='0.0'>   
+POLYGON EMPTY
+  </op></test>
+</case>
+
+
+</run>

Copied: trunk/tests/xmltester/tests/general/TestBufferMitredJoin.xml (from rev 2417, trunk/tests/xmltester/tests/TestBufferMitredJoin.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestBufferMitredJoin.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestBufferMitredJoin.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,60 @@
+<run>
+  <desc>
+    Test cases for buffers with mitred joins.
+  </desc>
+  <precisionModel type="FLOATING" />
+  <resultMatcher>com.vividsolutions.jtstest.testrunner.BufferResultMatcher</resultMatcher>
+
+<case>
+ <desc>Polygon with very close vertices  </desc>
+  <a>
+POLYGON ((588736.6028960398 4518922.914991864, 588736.1060708747 4518922.061957178, 588718.6830715544 4518930.620699637, 588712.0102834741 4518933.8985304395, 588722.7612465625 4518964.956739423, 588755.2073151038 4518948.2420851765, 588750.2892019567 4518938.490656119, 588750.2892047082 4518938.490654858, 588741.1098934844 4518920.290260831, 588736.6028960398 4518922.914991864))
+  </a>
+<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>   
+POLYGON ((588734.1297355227 4518928.603500288, 588720.8876067492 4518935.108463509, 588718.180507909 4518936.438254274, 588725.599306024 4518957.870248819, 588748.510613743 4518946.067444841, 588745.824857241 4518940.742239175, 588739.0370049385 4518927.28353524, 588734.7985587667 4518929.751873097, 588734.1297355227 4518928.603500288))
+	</op></test>
+</case>
+
+<case>
+ <desc>Polygon with almost collinear segments  </desc>
+  <a>
+    POLYGON ((589300.089821923 4519627.577687806, 589296.6197410262 4519621.834087054, 589292.5450979208 4519615.089809029, 589282.7894421419 4519620.983829066, 589289.8814929381 4519632.722288636, 589300.089821923 4519627.577687806))
+  </a>
+<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>   
+POLYGON ((589293.0184401305 4519625.542333956, 589292.3401596148 4519624.419659127, 589290.8510825798 4519621.954964854, 589289.654619631 4519622.677825188, 589291.766473935 4519626.173276233, 589293.0184401305 4519625.542333956))
+	</op></test>
+</case>
+
+<case>
+ <desc>Polygon with almost collinear segments  </desc>
+  <a>
+POLYGON ((588978.2942617612 4519797.499233156, 588989.1612999197 4519792.050291001, 588982.5784094566 4519779.549041149, 588962.0866377753 4519790.334848753, 588967.4026187821 4519802.960530801, 588978.2942617612 4519797.499233156))
+  </a>
+<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>   
+POLYGON ((588976.0531144794 4519793.029640461, 588982.3607149989 4519789.866888121, 588980.48352001 4519786.3019976355, 588968.47502784 4519792.622646146, 588969.9375199836 4519796.09612748, 588976.0531144794 4519793.029640461))
+	</op></test>
+</case>
+
+<case>
+ <desc>Polygon with almost collinear segments  </desc>
+  <a>
+POLYGON ((589099.8017397423 4518490.719003885, 589097.1198886324 4518486.20858194, 589090.9424687021 4518475.819013388, 589069.8993093553 4518487.1362185385, 589078.7377975255 4518502.093799692, 589081.1515112884 4518509.334764771, 589103.7370954598 4518497.015419995, 589099.8017397423 4518490.719003885))
+  </a>
+<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>  
+POLYGON ((589095.5298653984 4518493.317948498, 589092.8222002359 4518488.763943842, 589089.0925332544 4518482.491158241, 589076.8521287646 4518489.074160654, 589083.3129233124 4518500.0079495255, 589084.0046933009 4518502.083060501, 589096.6851902619 4518495.166462162, 589095.5298653984 4518493.317948498)) 
+	</op></test>
+</case>
+
+<case>
+ <desc>Polygon with very close vertices  </desc>
+  <a>
+POLYGON ((587854.8616905196 4519121.941123185, 587863.6671614297 4519138.176489661, 587863.9386104685 4519138.676991724, 587880.5408633598 4519129.672513268, 587871.463857397 4519112.9366913745, 587854.8616905196 4519121.941123185))
+  </a>
+<test><op name='bufferMitredJoin' arg1='A' arg2='-5.0'>  
+POLYGON ((587861.6406480775 4519123.952511722, 587865.9500049312 4519131.898025201, 587873.7618842344 4519127.661136427, 587869.4524883915 4519119.715644092, 587861.6406480775 4519123.952511722))
+	</op></test>
+</case>
+
+
+
+</run>

Copied: trunk/tests/xmltester/tests/general/TestCentroid.xml (from rev 2417, trunk/tests/xmltester/tests/TestCentroid.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestCentroid.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestCentroid.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,149 @@
+<run>
+  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
+
+<case>
+  <desc>P - single point</desc>
+  <a>    POINT(10 10)  </a>
+<test><op name="getCentroid" arg1="A" >    POINT(10 10)   </op></test>
+</case>
+
+<case>
+  <desc>mP - two points</desc>
+  <a>    MULTIPOINT(10 10, 20 20 )  </a>
+<test><op name="getCentroid" arg1="A" >    POINT(15 15)   </op></test>
+</case>
+
+<case>
+  <desc>mP - 4 points</desc>
+  <a>    MULTIPOINT(10 10, 20 20, 10 20, 20 10)  </a>
+<test><op name="getCentroid" arg1="A" >    POINT(15 15)   </op></test>
+</case>
+
+<case>
+  <desc>L - single segment</desc>
+  <a>    LINESTRING(10 10, 20 20)  </a>
+<test><op name="getCentroid" arg1="A" >    POINT(15 15)   </op></test>
+</case>
+
+<case>
+  <desc>L - two segments</desc>
+  <a>    LINESTRING (60 180, 120 100, 180 180)  </a>
+<test><op name="getCentroid" arg1="A" >    POINT (120 140)   </op></test>
+</case>
+
+<case>
+  <desc>L - elongated horseshoe</desc>
+  <a>    LINESTRING (80 0, 80 120, 120 120, 120 0))
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (100 69)   </op></test>
+</case>
+
+
+<case>
+  <desc>mL - two single-segment lines</desc>
+  <a>    MULTILINESTRING ((0 0, 0 100), (100 0, 100 100))  </a>
+<test><op name="getCentroid" arg1="A" >    POINT (50 50)   </op></test>
+</case>
+
+<case>
+  <desc>mL - two concentric rings, offset</desc>
+  <a>    MULTILINESTRING ((0 0, 0 200, 200 200, 200 0, 0 0), 
+  (60 180, 20 180, 20 140, 60 140, 60 180))  
+</a>
+<test><op name="getCentroid" arg1="A" >    POINT (90 110)   </op></test>
+</case>
+
+<case>
+  <desc>mL - complicated symmetrical collection of lines</desc>
+  <a>    MULTILINESTRING ((20 20, 60 60), 
+  (20 -20, 60 -60), 
+  (-20 -20, -60 -60), 
+  (-20 20, -60 60), 
+  (-80 0, 0 80, 80 0, 0 -80, -80 0), 
+  (-40 20, -40 -20), 
+  (-20 40, 20 40), 
+  (40 20, 40 -20), 
+  (20 -40, -20 -40)) </a>
+<test><op name="getCentroid" arg1="A" >    POINT (0 0)   </op></test>
+</case>
+
+<case>
+  <desc>A - box</desc>
+  <a>    POLYGON ((40 160, 160 160, 160 40, 40 40, 40 160))  </a>
+<test><op name="getCentroid" arg1="A" >    POINT (100 100)   </op></test>
+</case>
+
+<case>
+  <desc>A - box with hole</desc>
+  <a>    POLYGON ((0 200, 200 200, 200 0, 0 0, 0 200), (20 180, 80 180, 80 20, 20 20, 20 180)) </a>
+<test><op name="getCentroid" arg1="A" >    POINT (116 100)   </op></test>
+</case>
+
+<case>
+  <desc>A - box with offset hole (showing difference between area and line centroid)</desc>
+  <a>    POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), 
+  (60 180, 20 180, 20 140, 60 140, 60 180))
+	 </a>
+<test><op name="getCentroid" arg1="A" >    POINT (103 98)   </op></test>
+</case>
+
+<case>
+  <desc>A - box with 2 symmetric holes </desc>
+  <a>    POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), 
+  (60 180, 20 180, 20 140, 60 140, 60 180), 
+  (180 60, 140 60, 140 20, 180 20, 180 60))
+	 </a>
+<test><op name="getCentroid" arg1="A" >   POINT (100 100)   </op></test>
+</case>
+
+<case>
+  <desc>mA - symmetric angles</desc>
+  <a>    MULTIPOLYGON (((0 40, 0 140, 140 140, 140 120, 20 120, 20 40, 0 40)), 
+  ((0 0, 0 20, 120 20, 120 100, 140 100, 140 0, 0 0))) 
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (70 70)   </op></test>
+</case>
+
+<case>
+  <desc>GC - two adjacent polygons (showing that centroids are additive) </desc>
+  <a>    GEOMETRYCOLLECTION (POLYGON ((0 200, 20 180, 20 140, 60 140, 200 0, 0 0, 0 200)), 
+  POLYGON ((200 200, 0 200, 20 180, 60 180, 60 140, 200 0, 200 200))) 
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (103 98)   </op></test>
+</case>
+
+<case>
+  <desc>GC - heterogeneous collection of lines, points</desc>
+  <a>    GEOMETRYCOLLECTION (LINESTRING (80 0, 80 120, 120 120, 120 0), 
+  MULTIPOINT (20 60, 40 80, 60 60))
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (100 69)   </op></test>
+</case>
+
+<case>
+  <desc>GC - heterogeneous collection of polygons, line</desc>
+  <a>    GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), 
+  LINESTRING (80 0, 80 80, 120 40)) 
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (20 20)   </op></test>
+</case>
+
+<case>
+  <desc>GC - heterogeneous collection of polygons, lines, points</desc>
+  <a>    GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), 
+  LINESTRING (80 0, 80 80, 120 40), 
+  MULTIPOINT (20 60, 40 80, 60 60))
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (20 20)   </op></test>
+</case>
+
+<case>
+  <desc>GC - overlapping polygons </desc>
+  <a>    GEOMETRYCOLLECTION (POLYGON ((20 100, 20 -20, 60 -20, 60 100, 20 100)), 
+  POLYGON ((-20 60, 100 60, 100 20, -20 20, -20 60)))
+	</a>
+<test><op name="getCentroid" arg1="A" >    POINT (40 40)   </op></test>
+</case>
+
+
+</run>

Copied: trunk/tests/xmltester/tests/general/TestInteriorPoint.xml (from rev 2417, trunk/tests/xmltester/tests/TestInteriorPoint.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestInteriorPoint.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestInteriorPoint.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,57 @@
+<run>
+  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
+
+<case>
+  <desc>P - single point</desc>
+  <a>    POINT(10 10)  </a>
+<test><op name="getInteriorPoint" arg1="A" >    POINT(10 10)   </op></test>
+</case>
+
+<case>
+  <desc>P - single point</desc>
+  <a>    MULTIPOINT (60 300, 200 200, 240 240, 200 300, 40 140, 80 240, 140 240, 100 160, 140 200, 60 200)
+	</a>
+<test><op name="getInteriorPoint" arg1="A" >    POINT (140 240)   </op></test>
+</case>
+
+<case>
+  <desc>L - linestring with single segment</desc>
+  <a>    LINESTRING (0 0, 7 14)
+	</a>
+<test><op name="getInteriorPoint" arg1="A" >   POINT (7 14)   </op></test>
+</case>
+
+<case>
+  <desc>L - linestring with multiple segments </desc>
+  <a>    LINESTRING (0 0, 3 15, 6 2, 11 14, 16 5, 16 18, 2 22)
+	</a>
+<test><op name="getInteriorPoint" arg1="A" >   POINT (11 14)  </op></test>
+</case>
+
+<case>
+  <desc>mL - complex linestrings</desc>
+  <a>    MULTILINESTRING ((60 240, 140 300, 180 200, 40 140, 100 100, 120 220), 
+  (240 80, 260 160, 200 240, 180 340, 280 340, 240 180, 180 140, 40 200, 140 260))
+	</a>
+<test><op name="getInteriorPoint" arg1="A" >    POINT (180 200)   </op></test>
+</case>
+
+<case>
+  <desc>A - box</desc>
+  <a>    POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))
+	</a>
+<test><op name="getInteriorPoint" arg1="A" >    POINT (5 5)   </op></test>
+</case>
+
+<case>
+  <desc>mA - polygons with holes</desc>
+  <a>    MULTIPOLYGON (((60 320, 240 340, 260 100, 20 60, 120 180, 60 320), 
+  (200 280, 140 260, 180 160, 240 140, 200 280)), 
+  ((380 280, 300 260, 340 100, 440 80, 380 280), 
+    (380 220, 340 200, 400 100, 380 220)))
+	</a>
+<test><op name="getInteriorPoint" arg1="A" >    POINT (138 200)  </op></test>
+</case>
+
+
+</run>

Copied: trunk/tests/xmltester/tests/general/TestSimple.xml (from rev 2427, trunk/tests/xmltester/tests/TestSimple.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestSimple.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestSimple.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,296 @@
+<run>
+  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
+
+<case>
+  <desc>P - point</desc>
+  <a>
+    POINT(10 10)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mP - multipoint with repeated points</desc>
+  <a>
+    MULTIPOINT ((80 280), (80 220), (160 220), (80 220))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mP - multipoint with no repeated points</desc>
+  <a>
+    MULTIPOINT ((80 280), (80 220), (160 220))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mP - empty</desc>
+  <a>
+    MULTIPOINT EMPTY
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - simple line</desc>
+  <a>
+    LINESTRING(10 10, 20 20)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - non-simple, proper interior intersection</desc>
+  <a>
+    LINESTRING (20 60, 160 60, 80 160, 80 20)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - non-simple, interior intersection at vertices</desc>
+  <a>
+    LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - non-simple, interior intersection at Bdy/non-vertex</desc>
+  <a>
+    LINESTRING (20 60, 100 60, 60 100, 60 60)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - non-simple, interior intersection at Bdy/vertex</desc>
+  <a>
+    LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - simple, intersection at Bdy/Bdy (ring)</desc>
+  <a>
+    LINESTRING (20 20, 80 20, 80 80, 20 20)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - simple, intersection at Bdy/Bdy + non-vertex</desc>
+  <a>
+    LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80)
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>L - empty</desc>
+  <a>
+    LINESTRING EMPTY
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+
+<case>
+  <desc>mL - intersection between elements at non-vertex</desc>
+  <a>
+    MULTILINESTRING(
+  (40 140, 160 40), 
+  (160 140, 40 40))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mL - no intersection between elements</desc>
+  <a>
+    MULTILINESTRING(
+  (20 160, 20 20), 
+  (100 160, 100 20))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mL - mutual intersection at endpoints only</desc>
+  <a>
+    MULTILINESTRING ((60 140, 20 80, 60 40), 
+  (60 40, 100 80, 60 140))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mL - one element is non-simple</desc>
+  <a>
+    MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), 
+  (100 200, 200 120))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mL - proper intersection between elements at vertex</desc>
+  <a>
+    MULTILINESTRING ((40 120, 100 60), 
+  (160 120, 100 60), 
+  (40 60, 160 60))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mL - intersection between closed lines</desc>
+  <a>
+    MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), 
+  (80 160, 120 220, 120 100, 80 160))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mL - intersection between closed and open lines</desc>
+  <a>
+    MULTILINESTRING ((80 160, 40 220), 
+  (80 160, 120 220, 120 100, 80 160), 
+  (40 100, 80 160))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    false
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>A</desc>
+  <a>
+    POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>A - empty</desc>
+  <a>
+    POLYGON EMPTY
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mA</desc>
+  <a>
+    MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), 
+  ((160 380, 100 240, 20 380, 160 380), 
+    (120 340, 60 360, 80 320, 120 340)))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+<case>
+  <desc>mA - with touching elements</desc>
+  <a>
+    MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), 
+  ((160 380, 100 240, 20 380, 160 380), 
+    (120 340, 60 360, 80 320, 120 340)))
+  </a>
+<test>
+  <op name="isSimple" arg1="A">
+    true
+  </op>
+</test>
+</case>
+
+</run>


Property changes on: trunk/tests/xmltester/tests/general/TestSimple.xml
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: trunk/tests/xmltester/tests/general/TestValid.xml (from rev 2417, trunk/tests/xmltester/tests/TestValid.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestValid.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestValid.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,670 @@
+<run>
+   <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
+
+   <case>
+      <desc>L - linear-ring bowtie</desc>
+      <a>LINEARRING(0 0, 100 100, 100 0, 0 100, 0 0)</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+
+   <case>
+      <desc>L - linestring bowtie</desc>
+      <a>LINESTRING(0 0, 100 100, 100 0, 0 100, 0 0)</a>
+      <test>
+         <op name="isValid" arg1="A">true</op>
+      </test>
+   </case>
+
+   <case>
+      <desc>P - point</desc>
+      <a>
+    POINT(10 10)
+  </a>
+      <test>
+         <op name="isValid" arg1="A">
+    true
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>mP - no repeated points</desc>
+      <a>
+    MULTIPOINT(10 10, 20 20, 30 30)
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    true  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>P - repeated points</desc>
+      <a>
+    MULTIPOINT(10 10, 20 20, 30 30, 10 10)
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    true  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>L - no repeated points</desc>
+      <a>
+LINESTRING (40 180, 120 120, 140 200, 200 140, 240 200)
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    true  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>L - repeated points</desc>
+      <a>
+LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200)
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    true  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>L - linestring with two identical points </desc>
+      <a>LINESTRING(0 0, 0 0)</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - zero-area polygon </desc>
+      <a>POLYGON ((0 0, 0 0, 0 0, 0 0, 0 0))</a>
+      <test>
+         <op name="isValid" arg1="A"> false </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - polygon with too few points </desc>
+      <a>POLYGON ((0 0, 10 0, 20 0, 0 0, 0 0))</a>
+      <test>
+         <op name="isValid" arg1="A"> false </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - polygon with repeated point </desc>
+      <a>POLYGON ((107 246, 107 246, 250 285, 294 137, 151 90, 15 125, 157 174, 107 246))</a>
+      <test>
+         <op name="isValid" arg1="A"> true </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - polygon with degenerate hole ring (A-B-A) </desc>
+      <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>
+      </test>
+   </case>
+
+   <case>
+      <desc>mA - multipolygon with component with too few points </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)),
+((180 100, 180 180, 180 180, 180 100)))</a>
+      <test>
+         <op name="isValid" arg1="A"> false </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - polygon self-intersects at non-vertex</desc>
+      <a>POLYGON ((0 40, 0 0, 40 40, 40 0, 0 40))</a>
+      <test>
+         <op name="isValid" arg1="A"> false </op>
+      </test>
+   </case>
+   <case>
+      <desc>A - polygon self-intersects at vertex</desc>
+      <a>MULTIPOLYGON ( ((0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40)) ) </a>
+      <test>
+         <op name="isValid" arg1="A"> false </op>
+      </test>
+   </case>
+   <case>
+      <desc>A - polygon self-intersects at vertex/non-vertex</desc>
+      <a>POLYGON ((0 40, 20 20, 40 0, 40 40, 0 0, 0 40))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - hole self-intersects at non-vertex</desc>
+      <a>POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 0 0, 40 40, 40 0, 0 40))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - polygon self-intersects at vertex</desc>
+      <a>POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - polygon self-intersects at vertex/non-vertex</desc>
+      <a>POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 0 0, 0 40))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - Valid doughnut</desc>
+      <a>POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40))</a>
+      <test>
+         <op name="isValid" arg1="A">true</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - shell has repeated points</desc>
+      <a>POLYGON ((0 60, 0 0, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40))</a>
+      <test>
+         <op name="isValid" arg1="A">true</op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - shell touches hole without crossing it (valid)</desc>
+      <a>POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 60 20, 20 40))</a>
+      <test>
+         <op name="isValid" arg1="A">true</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - shell touches hole without crossing it, but does so twice (invalid)</desc>
+      <a>POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (0 40, 20 20, 60 20, 0 40))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - hole touches hole without crossing it (valid)</desc>
+      <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, 20 100))</a>
+      <test>
+         <op name="isValid" arg1="A">true</op>
+      </test>
+   </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), 
+		(20 100, 20 40, 100 40, 80 60, 100 80, 20 100))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </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), 
+		(20 100, 20 40, 100 40, 100 80, 20 100))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - spike (invalid)</desc>
+      <a>POLYGON ((0 60, 0 0, 60 0, 60 20, 100 20, 60 20, 60 60, 0 60))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - puncture (invalid)</desc>
+      <a>POLYGON ((0 60, 0 0, 60 0, 60 20, 20 20, 60 20, 60 60, 0 60))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - hole within a hole (invalid)</desc>
+      <a>POLYGON ((0 140, 0 0, 180 0, 180 140, 0 140), (20 20, 160 20, 160 120, 20 120, 20 20), (40 100, 40 40, 140 40, 140 100, 40 100))</a>
+      <test>
+         <op name="isValid" arg1="A">false</op>
+      </test>
+   </case>
+   <case>
+      <desc>A - empty shell and holes (valid)</desc>
+      <a>POLYGON (EMPTY, EMPTY, EMPTY)</a>
+      <test>
+         <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), 
+  (140 80, 120 180, 200 180, 140 80))
+  </a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - shell self-overlaps </desc>
+      <a>
+POLYGON ((60 340, 60 100, 340 100, 340 280, 340 200, 340 340, 60 340))
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    false  </op>
+      </test>
+   </case>
+
+   <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), 
+  (70 230, 80 230, 80 220, 80 220, 70 230))  </a>
+      <test>
+         <op name="isValid" arg1="A">
+    true
+  </op>
+      </test>
+   </case>
+   <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), 
+  (180 160, 240 60, 120 60, 180 160))  </a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - hole touches shell at two points</desc>
+      <a>
+POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
+  (140 180, 40 180, 140 260, 140 180))
+  </a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - hole touches shell at one non-vertex point</desc>
+      <a>
+POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
+  (140 180, 40 180, 140 240, 140 180))
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    true  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - hole touches shell at one vertex point</desc>
+      <a>
+POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), 
+  (140 180, 40 260, 140 240, 140 180))
+  </a>
+      <test>
+         <op name="isValid" arg1="A">    true  </op>
+      </test>
+   </case>
+
+   <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))  
+</a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <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))  
+</a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <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))  
+</a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - hole self-intersects </desc>
+      <a>
+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>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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), 
+  (140 280, 40 80, 240 80, 140 280))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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), 
+  (140 180, 200 120, 200 240, 140 180))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - shell self-touches at vertex </desc>
+      <a>
+POLYGON ((340 320, 340 200, 200 280, 200 80, 340 200, 340 20, 60 20, 60 340, 340 320))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - shell self-touches at non-vertex </desc>
+      <a>
+POLYGON ((300 320, 300 220, 260 260, 180 220, 360 220, 360 140, 120 140, 120 320, 300 320))	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+    <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), 
+  (160 100, 220 160, 240 100, 160 100))	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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))	
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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), 
+  (300 300, 300 200, 340 260, 300 300))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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), 
+  (190 50, 230 110, 290 50, 190 50))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <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), 
+  (190 50, 230 110, 290 50, 190 50))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>A - hole disconnects interiors </desc>
+      <a>
+POLYGON ((0 0, 10 10, 10 0, 0 0), 
+  (5 5, 5 0, 10 5, 5 5))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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), 
+  (260 200, 120 100, 200 60, 260 200))
+  	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+
+  
+  <case>
+      <desc>mA - adjacent shells (shared vertices) </desc>
+      <a>
+MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), 
+  ((140 120, 40 120, 40 200, 140 200, 140 120)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>mA - adjacent shells (different vertices) </desc>
+      <a>
+MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), 
+  ((160 120, 60 120, 40 200, 140 200, 160 120)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">
+    false
+  </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>mA - nested overlapping shells </desc>
+      <a>
+MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)), 
+  ((120 240, 220 240, 220 140, 120 140, 120 240)))
+	</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)), 
+  ((120 160, 140 160, 140 140, 120 160)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <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)), 
+  ((180 240, 180 160, 240 220, 180 240)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <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)), 
+  ((60 200, 340 60, 220 340, 60 200)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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)), 
+  ((60 200, 340 60, 220 340, 60 200)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <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)), 
+  ((60 200, 340 60, 220 340, 60 200)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <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)), 
+  ((180 100, 260 100, 260 180, 180 180, 180 100)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>mA - shells touch in single point </desc>
+      <a>
+MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), 
+  ((110 110, 150 20, 70 20, 110 110)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>mA - duplicate shells </desc>
+      <a>
+MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)), 
+  ((60 300, 320 220, 260 60, 60 100, 60 300)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      false      </op>
+      </test>
+   </case>
+
+   <case>
+      <desc>mA - shells are not nested but share all vertices </desc>
+      <a>
+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>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+   <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)), 
+  ((4 4, 4 6, 6 6, 6 4, 4 4)))
+	</a>
+      <test>
+         <op name="isValid" arg1="A">      true      </op>
+      </test>
+   </case>
+
+
+</run>

Copied: trunk/tests/xmltester/tests/general/TestValid2-big.xml (from rev 2417, trunk/tests/xmltester/tests/TestValid2-big.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestValid2-big.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestValid2-big.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,18 @@
+<run>
+   <precisionModel type="FLOATING"/>
+<case>
+  <desc>Test 92</desc>
+  <a>
+    POLYGON ((100 100, 1000000000000000 110, 1000000000000000 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 558</desc>
+  <a>
+    MULTIPOINT (-1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 0 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+
+</run>

Copied: trunk/tests/xmltester/tests/general/TestValid2.xml (from rev 2417, trunk/tests/xmltester/tests/TestValid2.xml)
===================================================================
--- trunk/tests/xmltester/tests/general/TestValid2.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/general/TestValid2.xml	2009-05-02 09:01:39 UTC (rev 2448)
@@ -0,0 +1,5246 @@
+<run>
+   <precisionModel type="FLOATING"/>
+<case>
+  <desc>Test 1</desc>
+  <a>
+    LINESTRING (-123456789 -40, 381039468754763 123456789)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 2</desc>
+  <a>
+    POINT (0 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 3</desc>
+  <a>
+    POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 4</desc>
+  <a>
+    POLYGON ((20 20, 140 20, 120 100, 20 100, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 5</desc>
+  <a>
+    POLYGON ((120 100, 140 20, 20 20, 20 100, 120 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 6</desc>
+  <a>
+    POLYGON ((20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 7</desc>
+  <a>
+    POLYGON ((0 0, 80 0, 80 80, 0 80, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 8</desc>
+  <a>
+    POLYGON ((100 200, 100 140, 180 140, 180 200, 100 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 9</desc>
+  <a>
+    POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 10</desc>
+  <a>
+    POLYGON ((140 120, 140 200, 240 200, 240 120, 140 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 11</desc>
+  <a>
+    POLYGON ((80 180, 140 260, 260 200, 200 60, 80 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 12</desc>
+  <a>
+    POLYGON ((240 80, 140 120, 180 240, 280 200, 240 80))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 13</desc>
+  <a>
+    POLYGON ((140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 14</desc>
+  <a>
+    POLYGON ((140 40, 180 80, 120 100, 140 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 15</desc>
+  <a>
+    POLYGON ((120 100, 180 80, 130 40, 120 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 16</desc>
+  <a>
+    POLYGON ((20 20, 180 20, 140 140, 20 140, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 17</desc>
+  <a>
+    POLYGON ((180 100, 80 200, 180 280, 260 200, 180 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 18</desc>
+  <a>
+    POLYGON ((140 140, 20 120, 0 220, 120 240, 140 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 19</desc>
+  <a>
+    POLYGON ((160 200, 210 70, 120 70, 160 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 20</desc>
+  <a>
+    POLYGON ((160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> false </op> </test>
+</case>
+<case>
+  <desc>Test 21</desc>
+  <a>
+    POLYGON ((110 140, 200 70, 200 160, 110 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 22</desc>
+  <a>
+    POLYGON ((110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> false </op> </test>
+</case>
+<case>
+  <desc>Test 23</desc>
+  <a>
+    POLYGON ((20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 24</desc>
+  <a>
+    POLYGON ((20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 25</desc>
+  <a>
+    POLYGON ((20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 26</desc>
+  <a>
+    POLYGON ((20 120, 300 120, 140 240, 20 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 27</desc>
+  <a>
+    POLYGON ((20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 28</desc>
+  <a>
+    POLYGON ((100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 29</desc>
+  <a>
+    POLYGON ((260 200, 180 80, 120 160, 200 160, 180 220, 260 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 30</desc>
+  <a>
+    POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 31</desc>
+  <a>
+    POLYGON ((0 140, 300 140, 140 240, 0 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 32</desc>
+  <a>
+    POLYGON ((20 240, 20 140, 320 140, 180 240, 20 240))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 33</desc>
+  <a>
+    POLYGON ((20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 34</desc>
+  <a>
+    POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 35</desc>
+  <a>
+    POLYGON ((120 120, 220 20, 280 20, 240 160, 120 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 36</desc>
+  <a>
+    POLYGON ((140 120, 160 20, 260 120, 220 200, 140 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 37</desc>
+  <a>
+    POLYGON ((20 140, 120 40, 20 40, 20 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 38</desc>
+  <a>
+    POLYGON ((190 140, 190 20, 140 20, 20 140, 190 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 39</desc>
+  <a>
+    POLYGON ((300 20, 220 20, 120 120, 260 160, 300 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 40</desc>
+  <a>
+    POLYGON ((140 120, 240 160, 280 60, 160 20, 140 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 41</desc>
+  <a>
+    POLYGON ((280 60, 180 60, 120 120, 260 180, 280 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 42</desc>
+  <a>
+    POLYGON ((120 200, 120 120, 40 120, 40 200, 120 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 43</desc>
+  <a>
+    POLYGON ((160 220, 140 120, 60 120, 40 220, 160 220))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 44</desc>
+  <a>
+    POLYGON ((140 120, 20 120, 20 220, 140 220, 140 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 45</desc>
+  <a>
+    POLYGON ((320 20, 220 20, 80 160, 240 140, 320 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 46</desc>
+  <a>
+    POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 47</desc>
+  <a>
+    POLYGON ((60 40, 60 140, 180 140, 180 40, 60 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 48</desc>
+  <a>
+    POLYGON ((20 20, 80 140, 160 60, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 49</desc>
+  <a>
+    POLYGON ((160 60, 20 20, 100 140, 160 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 50</desc>
+  <a>
+    POLYGON ((20 100, 140 160, 160 40, 20 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 51</desc>
+  <a>
+    POLYGON ((160 40, 20 100, 160 160, 160 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 52</desc>
+  <a>
+    POLYGON ((20 180, 180 120, 80 40, 20 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 53</desc>
+  <a>
+    POLYGON ((180 120, 100 40, 20 180, 180 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 54</desc>
+  <a>
+    POLYGON ((20 20, 140 40, 140 120, 20 160, 80 80, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 55</desc>
+  <a>
+    POLYGON ((20 20, 140 40, 140 140, 20 180, 80 100, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 56</desc>
+  <a>
+    POLYGON ((40 180, 60 100, 180 100, 200 180, 120 120, 40 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 57</desc>
+  <a>
+    POLYGON ((20 180, 60 80, 180 80, 220 180, 120 120, 20 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 58</desc>
+  <a>
+    POLYGON ((40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 59</desc>
+  <a>
+    POLYGON ((60 100, 180 100, 220 180, 120 140, 20 180, 60 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 60</desc>
+  <a>
+    POLYGON ((20 20, 20 140, 120 120, 120 40, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 61</desc>
+  <a>
+    POLYGON ((20 20, 20 180, 140 140, 140 60, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 62</desc>
+  <a>
+    POLYGON ((20 20, 120 40, 120 120, 20 140, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 63</desc>
+  <a>
+    POLYGON ((120 40, 20 20, 20 140, 120 120, 120 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 64</desc>
+  <a>
+    POLYGON ((20 20, 140 60, 140 140, 20 180, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 65</desc>
+  <a>
+    POLYGON ((140 60, 20 20, 20 180, 140 140, 140 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 66</desc>
+  <a>
+    POLYGON ((20 20, 60 120, 140 120, 180 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 67</desc>
+  <a>
+    POLYGON ((20 40, 120 40, 120 120, 20 140, 20 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 68</desc>
+  <a>
+    POLYGON ((20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 69</desc>
+  <a>
+    POLYGON ((150 150, 330 150, 250 70, 70 70, 150 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 70</desc>
+  <a>
+    POLYGON ((150 150, 270 150, 140 20, 20 20, 150 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 71</desc>
+  <a>
+    POLYGON ((150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 72</desc>
+  <a>
+    POLYGON ((150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 73</desc>
+  <a>
+    POLYGON ((20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 74</desc>
+  <a>
+    POLYGON ((190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 75</desc>
+  <a>
+    POLYGON ((70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 76</desc>
+  <a>
+    POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 77</desc>
+  <a>
+    POLYGON ((60 160, 20 200, 260 200, 220 160, 140 80, 60 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 78</desc>
+  <a>
+    POLYGON ((60 160, 20 200, 260 200, 140 80, 60 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 79</desc>
+  <a>
+    POLYGON ((20 200, 140 80, 260 200, 20 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 80</desc>
+  <a>
+    POLYGON ((20 200, 60 160, 140 80, 220 160, 260 200, 20 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 81</desc>
+  <a>
+    POLYGON ((20 200, 60 160, 140 80, 260 200, 20 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 82</desc>
+  <a>
+    POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 83</desc>
+  <a>
+    POLYGON ((100 100, 1000000 110, 10000000 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 84</desc>
+  <a>
+    POLYGON ((100 0, 100 200, 200 200, 200 0, 100 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 85</desc>
+  <a>
+    POLYGON ((120 0, 120 200, 200 200, 200 0, 120 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 86</desc>
+  <a>
+    POLYGON ((0 0, 0 200, 110 200, 110 0, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 87</desc>
+  <a>
+    POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 88</desc>
+  <a>
+    POLYGON ((100 100, 2100 110, 2100 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 89</desc>
+  <a>
+    POLYGON ((100 100, 2101 110, 2101 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 90</desc>
+  <a>
+    POLYGON ((100 100, 200 200, 200 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 91</desc>
+  <a>
+    POLYGON ((100 100, 1000000 110, 1000000 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 93</desc>
+  <a>
+    POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 94</desc>
+  <a>
+    POLYGON ((100 100, 500 110, 500 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 95</desc>
+  <a>
+    POLYGON ((100 100, 501 110, 501 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 96</desc>
+  <a>
+    POLYGON ((120 100, 130 200, 200 200, 200 100, 120 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 97</desc>
+  <a>
+    POLYGON ((120 100, 17 200, 200 200, 200 100, 120 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 98</desc>
+  <a>
+    POLYGON ((101 99, 101 1000000, 102 1000000, 101 99))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 99</desc>
+  <a>
+    POLYGON ((100 100, 200 101, 200 100, 100 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 100</desc>
+  <a>
+    POLYGON ((16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 101</desc>
+  <a>
+    POLYGON ((10 307, 22 307, 153 34, 22 34, 10 307))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 102</desc>
+  <a>
+    POLYGON ((160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 103</desc>
+  <a>
+    POLYGON ((170 120, 240 100, 260 50, 190 70, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 104</desc>
+  <a>
+    POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 105</desc>
+  <a>
+    POLYGON ((270 90, 200 50, 150 80, 210 120, 270 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 106</desc>
+  <a>
+    POLYGON ((170 120, 260 100, 240 60, 150 80, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 107</desc>
+  <a>
+    POLYGON ((220 120, 270 80, 200 60, 160 100, 220 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 108</desc>
+  <a>
+    POLYGON ((260 50, 180 70, 180 110, 260 90, 260 50))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 109</desc>
+  <a>
+    POLYGON ((230 110, 290 80, 190 60, 140 90, 230 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 110</desc>
+  <a>
+    POLYGON ((170 120, 330 120, 260 50, 100 50, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 111</desc>
+  <a>
+    POLYGON ((170 120, 330 120, 280 70, 120 70, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 112</desc>
+  <a>
+    POLYGON ((170 120, 300 120, 250 70, 120 70, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 113</desc>
+  <a>
+    POLYGON ((190 100, 310 100, 260 50, 140 50, 190 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 114</desc>
+  <a>
+    POLYGON ((280 130, 360 130, 270 40, 190 40, 280 130))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 115</desc>
+  <a>
+    POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 116</desc>
+  <a>
+    POLYGON ((220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 117</desc>
+  <a>
+    POLYGON ((260 130, 360 130, 280 40, 170 40, 260 130))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 118</desc>
+  <a>
+    POLYGON ((240 110, 340 110, 290 60, 190 60, 240 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 119</desc>
+  <a>
+    POLYGON ((250 120, 350 120, 280 50, 180 50, 250 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 120</desc>
+  <a>
+    POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 121</desc>
+  <a>
+    POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 122</desc>
+  <a>
+    POLYGON ((280 190, 330 150, 200 110, 150 150, 280 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 123</desc>
+  <a>
+    MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)), ((300 270, 420 270, 340 190, 220 190, 300 270)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 124</desc>
+  <a>
+    POLYGON ((80 190, 220 190, 140 110, 0 110, 80 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 125</desc>
+  <a>
+    POLYGON ((330 150, 200 110, 150 150, 280 190, 330 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 126</desc>
+  <a>
+    POLYGON ((290 190, 340 150, 220 120, 170 170, 290 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 127</desc>
+  <a>
+    POLYGON ((220 190, 340 190, 260 110, 140 110, 220 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 128</desc>
+  <a>
+    POLYGON ((140 190, 220 190, 100 70, 20 70, 140 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 129</desc>
+  <a>
+    POLYGON ((140 220, 60 140, 140 60, 220 140, 140 220))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 130</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)), ((180 100, 260 100, 260 180, 180 180, 180 100)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 131</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), ((110 110, 150 20, 70 20, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 132</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 133</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 134</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 135</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 136</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 137</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 138</desc>
+  <a>
+    POLYGON ((100 60, 140 100, 100 140, 60 100, 100 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 139</desc>
+  <a>
+    MULTIPOLYGON (((80 40, 120 40, 120 80, 80 80, 80 40)), ((120 80, 160 80, 160 120, 120 120, 120 80)), ((80 120, 120 120, 120 160, 80 160, 80 120)), ((40 80, 80 80, 80 120, 40 120, 40 80)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 140</desc>
+  <a>
+    LINESTRING (150 150, 40 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 141</desc>
+  <a>
+    POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 142</desc>
+  <a>
+    LINESTRING (40 40, 50 130, 130 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 143</desc>
+  <a>
+    LINESTRING (40 230, 150 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 144</desc>
+  <a>
+    LINESTRING (210 150, 330 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 145</desc>
+  <a>
+    LINESTRING (200 150, 310 150, 360 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 146</desc>
+  <a>
+    LINESTRING (180 150, 250 150, 230 250, 370 250, 410 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 147</desc>
+  <a>
+    LINESTRING (210 210, 220 150, 320 150, 370 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 148</desc>
+  <a>
+    LINESTRING (20 60, 150 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 149</desc>
+  <a>
+    LINESTRING (60 90, 310 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 150</desc>
+  <a>
+    LINESTRING (90 210, 210 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 151</desc>
+  <a>
+    LINESTRING (290 10, 130 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 152</desc>
+  <a>
+    LINESTRING (30 100, 100 100, 180 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 153</desc>
+  <a>
+    LINESTRING (20 100, 100 100, 360 100, 410 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 154</desc>
+  <a>
+    LINESTRING (90 210, 150 150, 210 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 155</desc>
+  <a>
+    LINESTRING (180 90, 280 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 156</desc>
+  <a>
+    LINESTRING (70 70, 80 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 157</desc>
+  <a>
+    LINESTRING (130 20, 150 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 158</desc>
+  <a>
+    LINESTRING (70 70, 80 20, 140 20, 150 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 159</desc>
+  <a>
+    LINESTRING (170 50, 170 20, 240 20, 260 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 160</desc>
+  <a>
+    LINESTRING (50 100, 140 190, 280 190)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 161</desc>
+  <a>
+    LINESTRING (140 60, 180 100, 290 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 162</desc>
+  <a>
+    LINESTRING (170 120, 210 80, 270 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 163</desc>
+  <a>
+    LINESTRING (170 120, 260 50)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 164</desc>
+  <a>
+    LINESTRING (190 90, 190 270)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 165</desc>
+  <a>
+    POLYGON ((190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 166</desc>
+  <a>
+    LINESTRING (60 160, 150 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 167</desc>
+  <a>
+    POLYGON ((190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 168</desc>
+  <a>
+    POLYGON ((190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 169</desc>
+  <a>
+    LINESTRING (190 90, 190 190, 190 270)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 170</desc>
+  <a>
+    LINESTRING (60 160, 110 110, 150 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 171</desc>
+  <a>
+    POLYGON ((190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 172</desc>
+  <a>
+    LINESTRING (130 110, 180 110, 190 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 173</desc>
+  <a>
+    POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 174</desc>
+  <a>
+    LINESTRING (80 110, 180 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 175</desc>
+  <a>
+    POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 176</desc>
+  <a>
+    LINESTRING (80 110, 170 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 177</desc>
+  <a>
+    POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 178</desc>
+  <a>
+    LINESTRING (80 110, 130 110, 170 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 179</desc>
+  <a>
+    LINESTRING (80 110, 130 110, 180 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 180</desc>
+  <a>
+    LINESTRING (160 70, 320 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 181</desc>
+  <a>
+    LINESTRING (160 70, 200 110, 280 190, 320 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 182</desc>
+  <a>
+    LINESTRING (70 50, 70 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 183</desc>
+  <a>
+    MULTIPOLYGON (((0 0, 0 100, 140 100, 140 0, 0 0)), ((20 170, 70 100, 130 170, 20 170)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 184</desc>
+  <a>
+    LINESTRING (110 110, 20 200, 200 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 185</desc>
+  <a>
+    POLYGON ((20 20, 200 20, 110 110, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 186</desc>
+  <a>
+    LINESTRING (150 70, 160 110, 200 60, 150 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 187</desc>
+  <a>
+    LINESTRING (80 60, 120 40, 120 70, 80 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 188</desc>
+  <a>
+    POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 189</desc>
+  <a>
+    LINESTRING (20 20, 200 20, 110 110, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 190</desc>
+  <a>
+    LINESTRING (110 90, 170 30, 50 30, 110 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 191</desc>
+  <a>
+    LINESTRING (110 110, 170 50, 170 110, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 192</desc>
+  <a>
+    LINESTRING (110 90, 70 50, 130 50, 110 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 193</desc>
+  <a>
+    LINESTRING (110 60, 20 150, 200 150, 110 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 194</desc>
+  <a>
+    LINESTRING (110 130, 110 70, 200 100, 110 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 195</desc>
+  <a>
+    LINESTRING (110 90, 160 40, 60 40, 110 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 196</desc>
+  <a>
+    LINESTRING (110 100, 40 30, 180 30, 110 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 197</desc>
+  <a>
+    POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 198</desc>
+  <a>
+    LINESTRING (110 110, 180 30, 40 30, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 199</desc>
+  <a>
+    LINESTRING (110 90, 180 30, 40 30, 110 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 200</desc>
+  <a>
+    LINESTRING (110 90, 50 30, 180 30, 110 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 201</desc>
+  <a>
+    LINESTRING (110 110, 200 200, 200 110, 110 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 202</desc>
+  <a>
+    POLYGON ((110 110, 200 20, 20 20, 110 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 203</desc>
+  <a>
+    LINESTRING (110 110, 200 200, 110 110, 20 200, 20 110, 200 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 204</desc>
+  <a>
+    LINESTRING (110 110, 20 110, 200 110, 50 110, 110 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 205</desc>
+  <a>
+    LINESTRING (110 110, 20 200, 110 200, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 206</desc>
+  <a>
+    LINESTRING (110 110, 170 50, 20 200, 20 110, 200 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 207</desc>
+  <a>
+    LINESTRING (110 110, 180 40, 110 40, 110 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 208</desc>
+  <a>
+    LINESTRING (110 60, 50 30, 170 30, 90 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 209</desc>
+  <a>
+    LINESTRING (110 110, 180 40, 110 40, 110 110, 70 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 210</desc>
+  <a>
+    LINESTRING (230 70, 170 120, 190 60, 140 60, 170 120, 270 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 211</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 210, 110 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 212</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (60 180, 60 110, 160 110, 110 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 213</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 214</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 215</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 216</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (110 60, 110 160, 200 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 217</desc>
+  <a>
+    MULTILINESTRING ((110 100, 40 30, 180 30), (170 30, 110 90, 50 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 218</desc>
+  <a>
+    MULTILINESTRING ((110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 219</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 220</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)), ((110 110, 20 200, 200 200, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 221</desc>
+  <a>
+    MULTILINESTRING ((20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 222</desc>
+  <a>
+    MULTILINESTRING ((20 110, 200 110), (110 110, 20 170, 20 130, 200 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 223</desc>
+  <a>
+    LINESTRING (0 0, 0 50, 50 50, 50 0, 0 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 224</desc>
+  <a>
+    MULTILINESTRING ((0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 225</desc>
+  <a>
+    LINESTRING (40 180, 140 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 226</desc>
+  <a>
+    MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((20 180, 20 80, 180 80, 180 180, 20 180)))
+  </a>
+  <test> <op name="isValid" arg1="A"> false </op> </test>
+</case>
+<case>
+  <desc>Test 227</desc>
+  <a>
+    MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((60 180, 60 80, 180 80, 180 180, 60 180)))
+  </a>
+  <test> <op name="isValid" arg1="A"> false </op> </test>
+</case>
+<case>
+  <desc>Test 228</desc>
+  <a>
+    LINESTRING (0 0, 60 0, 60 60, 60 0, 120 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 229</desc>
+  <a>
+    MULTILINESTRING ((0 0, 60 0), (60 0, 120 0), (60 0, 60 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 230</desc>
+  <a>
+    LINESTRING (40 40, 120 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 231</desc>
+  <a>
+    LINESTRING (40 40, 60 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 232</desc>
+  <a>
+    LINESTRING (60 240, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 233</desc>
+  <a>
+    LINESTRING (40 40, 180 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 234</desc>
+  <a>
+    LINESTRING (120 120, 20 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 235</desc>
+  <a>
+    LINESTRING (60 240, 120 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 236</desc>
+  <a>
+    LINESTRING (20 180, 140 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 237</desc>
+  <a>
+    LINESTRING (40 120, 120 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 238</desc>
+  <a>
+    LINESTRING (40 40, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 239</desc>
+  <a>
+    LINESTRING (100 100, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 240</desc>
+  <a>
+    LINESTRING (40 120, 120 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 241</desc>
+  <a>
+    LINESTRING (20 20, 180 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 242</desc>
+  <a>
+    LINESTRING (20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 243</desc>
+  <a>
+    LINESTRING (50 50, 140 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 244</desc>
+  <a>
+    LINESTRING (180 180, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 245</desc>
+  <a>
+    LINESTRING (120 120, 260 260)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 246</desc>
+  <a>
+    LINESTRING (260 260, 120 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 247</desc>
+  <a>
+    LINESTRING (40 40, 100 100, 200 120, 80 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 248</desc>
+  <a>
+    LINESTRING (40 40, 20 100, 40 160, 20 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 249</desc>
+  <a>
+    LINESTRING (20 200, 40 160, 20 100, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 250</desc>
+  <a>
+    LINESTRING (80 240, 200 120, 100 100, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 251</desc>
+  <a>
+    LINESTRING (60 60, 60 230, 140 230, 250 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 252</desc>
+  <a>
+    LINESTRING (20 20, 60 60, 250 160, 310 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 253</desc>
+  <a>
+    LINESTRING (20 20, 110 110, 200 110, 320 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 254</desc>
+  <a>
+    LINESTRING (60 110, 60 250, 360 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 255</desc>
+  <a>
+    LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 256</desc>
+  <a>
+    LINESTRING (360 210, 310 160, 110 160, 60 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 257</desc>
+  <a>
+    LINESTRING (160 160, 240 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 258</desc>
+  <a>
+    LINESTRING (240 240, 160 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 259</desc>
+  <a>
+    LINESTRING (60 150, 110 100, 170 100, 110 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 260</desc>
+  <a>
+    LINESTRING (200 120, 200 190, 150 240, 200 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 261</desc>
+  <a>
+    LINESTRING (200 240, 150 240, 200 200, 200 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 262</desc>
+  <a>
+    LINESTRING (60 230, 80 140, 120 140, 140 230)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 263</desc>
+  <a>
+    LINESTRING (60 110, 200 110, 250 160, 300 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 264</desc>
+  <a>
+    LINESTRING (60 110, 200 110, 250 160, 300 210, 360 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 265</desc>
+  <a>
+    LINESTRING (60 110, 220 110, 250 160, 280 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 266</desc>
+  <a>
+    LINESTRING (60 110, 150 110, 200 160, 250 110, 360 110, 360 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 267</desc>
+  <a>
+    LINESTRING (130 160, 160 110, 220 110, 250 160, 250 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 268</desc>
+  <a>
+    LINESTRING (130 160, 160 110, 190 110, 230 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 269</desc>
+  <a>
+    LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 270</desc>
+  <a>
+    LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 271</desc>
+  <a>
+    LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 380 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 272</desc>
+  <a>
+    LINESTRING (110 160, 160 110, 200 110, 250 160, 250 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 273</desc>
+  <a>
+    LINESTRING (110 160, 180 110, 250 160, 320 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 274</desc>
+  <a>
+    LINESTRING (140 160, 180 80, 220 160, 250 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 275</desc>
+  <a>
+    LINESTRING (40 40, 100 100, 200 120, 130 190)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 276</desc>
+  <a>
+    LINESTRING (20 130, 70 130, 160 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 277</desc>
+  <a>
+    LINESTRING (40 160, 40 100, 110 40, 170 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 278</desc>
+  <a>
+    LINESTRING (130 110, 180 160, 230 110, 280 160, 330 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 279</desc>
+  <a>
+    LINESTRING (30 140, 80 140, 100 100, 200 30)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 280</desc>
+  <a>
+    LINESTRING (110 110, 110 160, 180 110, 250 160, 250 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 281</desc>
+  <a>
+    LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 282</desc>
+  <a>
+    LINESTRING (20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 283</desc>
+  <a>
+    LINESTRING (20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 284</desc>
+  <a>
+    LINESTRING (30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 285</desc>
+  <a>
+    LINESTRING (80 240, 120 200, 200 120, 100 100, 80 80, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 286</desc>
+  <a>
+    LINESTRING (260 210, 240 130, 280 120, 260 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 287</desc>
+  <a>
+    LINESTRING (100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 288</desc>
+  <a>
+    LINESTRING (140 130, 100 110, 120 60, 170 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 289</desc>
+  <a>
+    LINESTRING (60 110, 110 160, 310 160, 360 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 290</desc>
+  <a>
+    LINESTRING (60 110, 110 160, 250 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 291</desc>
+  <a>
+    LINESTRING (110 160, 310 160, 340 190)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 292</desc>
+  <a>
+    LINESTRING (140 160, 250 160, 310 160, 340 190)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 293</desc>
+  <a>
+    LINESTRING (110 160, 250 160, 310 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 294</desc>
+  <a>
+    LINESTRING (200 120, 100 100, 40 40, 140 80, 200 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 295</desc>
+  <a>
+    LINESTRING (280 240, 240 140, 200 120, 100 100, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 296</desc>
+  <a>
+    LINESTRING (80 190, 140 140, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 297</desc>
+  <a>
+    LINESTRING (240 200, 200 260, 80 240, 140 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 298</desc>
+  <a>
+    LINESTRING (140 180, 80 240, 200 260, 240 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 299</desc>
+  <a>
+    LINESTRING (280 240, 240 140, 200 120, 80 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 300</desc>
+  <a>
+    LINESTRING (20 80, 120 80, 200 80, 260 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 301</desc>
+  <a>
+    LINESTRING (100 100, 200 120, 240 140, 280 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 302</desc>
+  <a>
+    LINESTRING (280 240, 240 140, 200 120, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 303</desc>
+  <a>
+    LINESTRING (80 20, 80 80, 240 80, 300 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 304</desc>
+  <a>
+    LINESTRING (20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 305</desc>
+  <a>
+    LINESTRING (100 100, 20 180, 180 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 306</desc>
+  <a>
+    LINESTRING (100 100, 180 20, 20 20, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 307</desc>
+  <a>
+    LINESTRING (20 100, 180 100, 100 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 308</desc>
+  <a>
+    LINESTRING (100 40, 100 160, 180 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 309</desc>
+  <a>
+    LINESTRING (20 100, 100 100, 180 100, 100 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 310</desc>
+  <a>
+    LINESTRING (100 100, 160 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 311</desc>
+  <a>
+    LINESTRING (100 100, 180 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 312</desc>
+  <a>
+    LINESTRING (60 60, 100 100, 140 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 313</desc>
+  <a>
+    LINESTRING (100 100, 190 10, 190 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 314</desc>
+  <a>
+    LINESTRING (100 100, 160 40, 160 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 315</desc>
+  <a>
+    LINESTRING (60 140, 160 40, 160 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 316</desc>
+  <a>
+    LINESTRING (20 20, 140 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 317</desc>
+  <a>
+    LINESTRING (80 80, 20 80, 140 80, 80 20, 80 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 318</desc>
+  <a>
+    LINESTRING (80 80, 20 80, 140 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 319</desc>
+  <a>
+    LINESTRING (80 80, 140 80, 80 20, 80 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 320</desc>
+  <a>
+    LINESTRING (80 80, 20 80, 140 80, 80 20, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 321</desc>
+  <a>
+    LINESTRING (80 80, 20 80, 140 80, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 322</desc>
+  <a>
+    LINESTRING (80 80, 20 80, 20 140, 140 20, 80 20, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 323</desc>
+  <a>
+    LINESTRING (20 140, 140 20, 100 20, 100 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 324</desc>
+  <a>
+    LINESTRING (140 80, 20 80, 120 80, 80 20, 80 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 325</desc>
+  <a>
+    LINESTRING (140 80, 20 80, 140 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 326</desc>
+  <a>
+    LINESTRING (140 80, 20 80, 80 140, 80 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 327</desc>
+  <a>
+    LINESTRING (140 80, 80 80, 20 80, 50 140, 50 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 328</desc>
+  <a>
+    LINESTRING (140 80, 20 80, 120 80, 80 20, 80 80, 80 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 329</desc>
+  <a>
+    LINESTRING (140 80, 20 80, 80 80, 140 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 330</desc>
+  <a>
+    LINESTRING (140 80, 20 80, 80 140, 80 80, 80 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 331</desc>
+  <a>
+    LINESTRING (130 150, 220 150, 220 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 332</desc>
+  <a>
+    LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 333</desc>
+  <a>
+    LINESTRING (30 150, 130 150, 250 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 334</desc>
+  <a>
+    LINESTRING (30 150, 250 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 335</desc>
+  <a>
+    LINESTRING (130 240, 130 20, 30 20, 130 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 336</desc>
+  <a>
+    LINESTRING (120 240, 120 20, 20 20, 120 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 337</desc>
+  <a>
+    LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 338</desc>
+  <a>
+    LINESTRING (110 110, 200 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 339</desc>
+  <a>
+    LINESTRING (20 110, 200 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 340</desc>
+  <a>
+    LINESTRING (90 200, 90 130, 110 110, 150 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 341</desc>
+  <a>
+    LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 342</desc>
+  <a>
+    LINESTRING (200 110, 110 110, 90 130, 90 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 343</desc>
+  <a>
+    LINESTRING (80 80, 150 80, 210 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 344</desc>
+  <a>
+    MULTILINESTRING ((20 20, 140 140), (20 140, 140 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 345</desc>
+  <a>
+    LINESTRING (40 80, 160 200, 260 20, 40 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 346</desc>
+  <a>
+    LINESTRING (40 80, 260 20, 160 200, 40 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 347</desc>
+  <a>
+    LINESTRING (260 20, 40 80, 160 200, 260 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 348</desc>
+  <a>
+    LINESTRING (100 140, 160 200, 260 20, 40 80, 100 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 349</desc>
+  <a>
+    LINESTRING (100 100, 180 180, 20 180, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 350</desc>
+  <a>
+    LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 351</desc>
+  <a>
+    LINESTRING (40 150, 150 40, 170 20, 170 190, 40 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 352</desc>
+  <a>
+    LINESTRING (180 100, 20 100, 100 180, 180 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 353</desc>
+  <a>
+    LINESTRING (180 180, 100 100, 20 180, 180 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 354</desc>
+  <a>
+    LINESTRING (20 180, 100 100, 20 20, 20 180)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 355</desc>
+  <a>
+    LINESTRING (100 20, 100 180, 180 100, 100 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 356</desc>
+  <a>
+    LINESTRING (170 20, 20 170, 170 170, 170 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 357</desc>
+  <a>
+    LINESTRING (40 150, 150 150, 90 210, 40 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 358</desc>
+  <a>
+    LINESTRING (20 150, 170 150, 90 230, 20 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 359</desc>
+  <a>
+    LINESTRING (40 150, 150 150, 150 40, 20 40, 20 150, 40 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 360</desc>
+  <a>
+    LINESTRING (110 110, 200 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 361</desc>
+  <a>
+    LINESTRING (200 20, 20 200, 200 200, 110 110, 110 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 362</desc>
+  <a>
+    LINESTRING (200 20, 20 200, 200 200, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 363</desc>
+  <a>
+    LINESTRING (110 110, 20 110, 110 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 364</desc>
+  <a>
+    LINESTRING (110 110, 200 200, 110 200, 200 110, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 365</desc>
+  <a>
+    LINESTRING (20 120, 120 120, 20 20, 120 20, 20 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 366</desc>
+  <a>
+    LINESTRING (170 100, 70 100, 170 170, 70 170, 170 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 367</desc>
+  <a>
+    LINESTRING (20 110, 110 110, 20 20, 110 20, 20 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 368</desc>
+  <a>
+    LINESTRING (110 160, 70 110, 60 160, 20 130, 110 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 369</desc>
+  <a>
+    LINESTRING (20 200, 200 200, 20 20, 200 20, 20 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 370</desc>
+  <a>
+    LINESTRING (20 110, 200 110, 200 160, 20 60, 20 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 371</desc>
+  <a>
+    LINESTRING (200 200, 110 110, 200 110, 110 200, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 372</desc>
+  <a>
+    LINESTRING (220 120, 120 20, 220 20, 120 120, 220 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 373</desc>
+  <a>
+    MULTILINESTRING ((70 20, 20 90, 70 170), (70 170, 120 90, 70 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 374</desc>
+  <a>
+    MULTILINESTRING ((20 20, 90 20, 170 20), (90 20, 90 80, 90 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 375</desc>
+  <a>
+    MULTILINESTRING ((90 140, 90 60, 90 20), (170 20, 130 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 376</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 377</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 378</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 379</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 380</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 381</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 382</desc>
+  <a>
+    MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 383</desc>
+  <a>
+    MULTILINESTRING ((20 20, 90 90, 20 160), (90 160, 90 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 384</desc>
+  <a>
+    MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 385</desc>
+  <a>
+    MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 386</desc>
+  <a>
+    MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 90 90, 160 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 387</desc>
+  <a>
+    POINT (20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 388</desc>
+  <a>
+    POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 389</desc>
+  <a>
+    POINT (70 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 390</desc>
+  <a>
+    POLYGON ((110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 391</desc>
+  <a>
+    POINT (110 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 392</desc>
+  <a>
+    POLYGON ((20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 393</desc>
+  <a>
+    POINT (100 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 394</desc>
+  <a>
+    POLYGON ((20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 395</desc>
+  <a>
+    POLYGON ((20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150))
+  </a>
+  <test> <op name="isValid" arg1="A"> false </op> </test>
+</case>
+<case>
+  <desc>Test 396</desc>
+  <a>
+    POINT (60 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 397</desc>
+  <a>
+    POINT (110 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 398</desc>
+  <a>
+    POINT (160 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 399</desc>
+  <a>
+    POINT (100 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 400</desc>
+  <a>
+    POINT (100 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 401</desc>
+  <a>
+    POINT (60 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 402</desc>
+  <a>
+    POLYGON ((190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 403</desc>
+  <a>
+    POINT (190 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 404</desc>
+  <a>
+    POINT (190 190)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 405</desc>
+  <a>
+    POINT (360 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 406</desc>
+  <a>
+    POINT (130 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 407</desc>
+  <a>
+    POINT (280 50)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 408</desc>
+  <a>
+    POINT (150 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 409</desc>
+  <a>
+    POINT (100 50)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 410</desc>
+  <a>
+    POINT (140 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 411</desc>
+  <a>
+    POINT (190 50)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 412</desc>
+  <a>
+    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> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 413</desc>
+  <a>
+    POINT (180 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 414</desc>
+  <a>
+    POLYGON ((190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 415</desc>
+  <a>
+    MULTIPOINT (20 80, 110 160, 20 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 416</desc>
+  <a>
+    MULTIPOINT (20 80, 60 120, 20 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 417</desc>
+  <a>
+    MULTIPOINT (10 80, 110 170, 110 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 418</desc>
+  <a>
+    MULTIPOINT (10 80, 110 170, 160 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 419</desc>
+  <a>
+    MULTIPOINT (20 120, 60 120, 110 120, 160 120, 200 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 420</desc>
+  <a>
+    MULTIPOINT (60 120, 110 120, 160 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 421</desc>
+  <a>
+    MULTIPOINT (60 120, 160 120, 160 40, 60 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 422</desc>
+  <a>
+    MULTIPOINT (20 150, 60 120, 110 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 423</desc>
+  <a>
+    MULTIPOINT (110 80, 160 120, 200 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 424</desc>
+  <a>
+    MULTIPOINT (110 80, 110 120, 110 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 425</desc>
+  <a>
+    MULTIPOINT (110 170, 110 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 426</desc>
+  <a>
+    MULTIPOINT (60 120, 160 120, 110 80, 110 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 427</desc>
+  <a>
+    MULTIPOINT (90 80, 130 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 428</desc>
+  <a>
+    MULTIPOINT (60 120, 160 120, 110 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 429</desc>
+  <a>
+    MULTIPOINT (40 170, 40 90, 130 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 430</desc>
+  <a>
+    MULTIPOINT (90 170, 280 170, 190 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 431</desc>
+  <a>
+    MULTIPOINT (190 110, 150 70, 230 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 432</desc>
+  <a>
+    POINT (100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 433</desc>
+  <a>
+    MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)), ((100 180, 100 100, 180 100, 180 180, 100 180)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 434</desc>
+  <a>
+    POINT (20 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 435</desc>
+  <a>
+    POINT (60 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 436</desc>
+  <a>
+    POINT (110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 437</desc>
+  <a>
+    MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ((110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 438</desc>
+  <a>
+    POINT (110 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 439</desc>
+  <a>
+    LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 440</desc>
+  <a>
+    POINT (90 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 441</desc>
+  <a>
+    POINT (340 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 442</desc>
+  <a>
+    POINT (230 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 443</desc>
+  <a>
+    POINT (160 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 444</desc>
+  <a>
+    POINT (90 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 445</desc>
+  <a>
+    LINESTRING (150 150, 20 20, 280 20, 150 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 446</desc>
+  <a>
+    POINT (150 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 447</desc>
+  <a>
+    POINT (150 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 448</desc>
+  <a>
+    POINT (100 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 449</desc>
+  <a>
+    POINT (220 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 450</desc>
+  <a>
+    LINESTRING (110 110, 220 20, 20 20, 110 110, 220 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 451</desc>
+  <a>
+    LINESTRING (110 110, 220 20, 20 20, 220 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 452</desc>
+  <a>
+    POINT (110 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 453</desc>
+  <a>
+    POINT (220 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 454</desc>
+  <a>
+    LINESTRING (220 220, 20 20, 220 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 455</desc>
+  <a>
+    POINT (20 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 456</desc>
+  <a>
+    LINESTRING (20 200, 20 20, 110 20, 20 110, 110 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 457</desc>
+  <a>
+    POINT (20 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 458</desc>
+  <a>
+    LINESTRING (20 200, 200 20, 20 20, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 459</desc>
+  <a>
+    LINESTRING (20 200, 200 20, 140 20, 140 80, 80 140, 20 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 460</desc>
+  <a>
+    POINT (80 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 461</desc>
+  <a>
+    LINESTRING (20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 462</desc>
+  <a>
+    LINESTRING (20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 463</desc>
+  <a>
+    LINESTRING (20 200, 110 110, 200 20, 20 20, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 464</desc>
+  <a>
+    LINESTRING (20 200, 200 20, 20 20, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 465</desc>
+  <a>
+    LINESTRING (20 200, 110 110, 20 20, 200 20, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 466</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 467</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 468</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 469</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 470</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 471</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 472</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 473</desc>
+  <a>
+    LINESTRING (110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 474</desc>
+  <a>
+    LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 475</desc>
+  <a>
+    LINESTRING (200 200, 20 20, 200 20, 20 200, 110 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 476</desc>
+  <a>
+    LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 477</desc>
+  <a>
+    LINESTRING (200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 478</desc>
+  <a>
+    POINT (110 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 479</desc>
+  <a>
+    LINESTRING (110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 480</desc>
+  <a>
+    LINESTRING (110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 481</desc>
+  <a>
+    LINESTRING (110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 482</desc>
+  <a>
+    LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 483</desc>
+  <a>
+    LINESTRING (110 110, 200 200, 110 200, 110 20, 20 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 484</desc>
+  <a>
+    POINT (140 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 485</desc>
+  <a>
+    LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 486</desc>
+  <a>
+    POINT (90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 487</desc>
+  <a>
+    LINESTRING (90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 488</desc>
+  <a>
+    LINESTRING (90 130, 20 130, 20 200, 200 20, 20 20, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 489</desc>
+  <a>
+    LINESTRING (200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 490</desc>
+  <a>
+    LINESTRING (110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 491</desc>
+  <a>
+    LINESTRING (110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 492</desc>
+  <a>
+    LINESTRING (110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 493</desc>
+  <a>
+    LINESTRING (110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 494</desc>
+  <a>
+    LINESTRING (200 200, 20 20, 200 20, 20 200, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 495</desc>
+  <a>
+    LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 496</desc>
+  <a>
+    LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 497</desc>
+  <a>
+    LINESTRING (90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 498</desc>
+  <a>
+    LINESTRING (90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 499</desc>
+  <a>
+    LINESTRING (90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 500</desc>
+  <a>
+    LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 501</desc>
+  <a>
+    LINESTRING (90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 502</desc>
+  <a>
+    LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 503</desc>
+  <a>
+    POINT (110 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 504</desc>
+  <a>
+    LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 505</desc>
+  <a>
+    LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 506</desc>
+  <a>
+    MULTIPOINT (50 250, 90 220, 130 190)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 507</desc>
+  <a>
+    MULTIPOINT (180 180, 230 130, 280 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 508</desc>
+  <a>
+    MULTIPOINT (50 120, 90 80, 130 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 509</desc>
+  <a>
+    MULTIPOINT (300 280, 340 240, 380 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 510</desc>
+  <a>
+    MULTIPOINT (230 150, 260 120, 290 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 511</desc>
+  <a>
+    MULTIPOINT (200 190, 240 150, 270 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 512</desc>
+  <a>
+    MULTIPOINT (160 150, 190 120, 220 90)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 513</desc>
+  <a>
+    MULTIPOINT (120 190, 160 150, 200 110)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 514</desc>
+  <a>
+    MULTIPOINT (90 80, 160 150, 340 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 515</desc>
+  <a>
+    MULTIPOINT (90 80, 160 150, 300 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 516</desc>
+  <a>
+    MULTIPOINT (90 80, 160 150, 240 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 517</desc>
+  <a>
+    MULTIPOINT (90 80, 130 120, 210 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 518</desc>
+  <a>
+    MULTIPOINT (130 120, 210 150, 340 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 519</desc>
+  <a>
+    MULTIPOINT (160 150, 240 150, 340 210)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 520</desc>
+  <a>
+    MULTIPOINT (160 150, 300 150, 340 150)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 521</desc>
+  <a>
+    MULTIPOINT (160 150, 240 150, 340 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 522</desc>
+  <a>
+    POINT (40 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 523</desc>
+  <a>
+    POINT (40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 524</desc>
+  <a>
+    MULTIPOINT (20 20, 80 80, 20 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 525</desc>
+  <a>
+    MULTIPOINT (40 40, 80 60, 120 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 526</desc>
+  <a>
+    MULTIPOINT (40 40, 120 100, 80 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 527</desc>
+  <a>
+    MULTIPOINT (40 40, 60 100, 100 60, 120 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 528</desc>
+  <a>
+    MULTIPOINT (20 120, 60 60, 100 100, 140 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 529</desc>
+  <a>
+    MULTIPOINT (20 20, 80 70, 140 120, 200 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 530</desc>
+  <a>
+    MULTIPOINT (20 20, 140 120, 80 70, 200 170)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 531</desc>
+  <a>
+    MULTIPOINT (80 70, 20 20, 200 170, 140 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 532</desc>
+  <a>
+    MULTIPOINT (80 70, 140 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 533</desc>
+  <a>
+    MULTIPOINT (140 120, 80 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 534</desc>
+  <a>
+    MULTIPOINT (80 170, 140 120, 200 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 535</desc>
+  <a>
+    MULTIPOINT (80 170, 140 120, 200 80, 80 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 536</desc>
+  <a>
+    POINT (10 10)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 537</desc>
+  <a>
+    MULTIPOINT (10 10, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 538</desc>
+  <a>
+    LINESTRING (10 10, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 539</desc>
+  <a>
+    LINESTRING (10 10, 20 20, 20 10, 10 10)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 540</desc>
+  <a>
+    LINESTRING (40 40, 100 100, 180 100, 180 180, 100 180, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 541</desc>
+  <a>
+    MULTILINESTRING ((10 10, 20 20), (20 20, 30 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 542</desc>
+  <a>
+    MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 543</desc>
+  <a>
+    MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 544</desc>
+  <a>
+    MULTILINESTRING ((10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 545</desc>
+  <a>
+    MULTILINESTRING ((10 10, 20 20, 20 30, 30 30, 30 20, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 546</desc>
+  <a>
+    POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 547</desc>
+  <a>
+    POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 548</desc>
+  <a>
+    MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 549</desc>
+  <a>
+    POLYGON ((10 10, 100 10, 100 100, 10 100, 10 10))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 550</desc>
+  <a>
+    LINESTRING (30 220, 240 220, 240 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 551</desc>
+  <a>
+    LINESTRING (110 290, 110 100, 110 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 552</desc>
+  <a>
+    LINESTRING (120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 553</desc>
+  <a>
+    POLYGON ((200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360), (220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 554</desc>
+  <a>
+    MULTIPOINT (70 340, 70 50, 430 50, 420 340, 340 120, 390 110, 390 70, 350 100, 350 50, 370 90, 320 80, 360 120, 350 80, 390 90, 420 80, 410 60, 410 100, 370 100, 380 60, 370 80, 380 100, 360 80, 370 80, 380 70, 390 80, 390 70, 410 70, 400 60, 410 60, 410 60, 410 60, 370 70, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 555</desc>
+  <a>
+    MULTIPOINT (140 350, 510 140, 110 140, 250 290, 250 50, 300 370, 450 310, 440 160, 290 280, 220 160, 100 260, 320 230, 200 280, 360 130, 330 210, 380 80, 220 210, 380 310, 260 150, 260 110, 170 130)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 556</desc>
+  <a>
+    GEOMETRYCOLLECTION (POINT (110 300), POINT (100 110), POINT (130 210), POINT (150 210), POINT (150 180), POINT (130 170), POINT (140 190), POINT (130 200), LINESTRING (240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON ((210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340), (230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 557</desc>
+  <a>
+    MULTIPOINT (50 320, 50 280, 50 230, 50 160, 50 120, 100 120, 160 120, 210 120, 210 180, 210 150, 180 180, 140 180, 140 210, 140 260, 160 180, 140 300, 140 320, 110 320, 80 320)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 559</desc>
+  <a>
+    POLYGON ((50 50, 200 50, 200 200, 50 200, 50 50))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 560</desc>
+  <a>
+    POLYGON ((20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 561</desc>
+  <a>
+    POLYGON ((80 100, 220 100, 220 240, 80 240, 80 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 562</desc>
+  <a>
+    POLYGON ((20 340, 330 380, 50 40, 20 340))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 563</desc>
+  <a>
+    POLYGON ((210 320, 140 270, 0 270, 140 220, 210 320))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 564</desc>
+  <a>
+    POLYGON ((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 565</desc>
+  <a>
+    POLYGON ((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 566</desc>
+  <a>
+    POLYGON ((0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 567</desc>
+  <a>
+    POLYGON ((230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 568</desc>
+  <a>
+    POLYGON ((0 0, 210 0, 210 230, 0 230, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 569</desc>
+  <a>
+    MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 90, 60 60, 90 60, 90 90, 60 90)), ((70 120, 90 90, 100 120, 70 120)), ((120 70, 90 90, 120 100, 120 70)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 570</desc>
+  <a>
+    POLYGON ((0 0, 340 0, 340 300, 0 300, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 571</desc>
+  <a>
+    MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 100, 60 60, 100 60, 100 100, 60 100)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 572</desc>
+  <a>
+    POLYGON ((0 0, 120 0, 120 120, 0 120, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 573</desc>
+  <a>
+    MULTIPOLYGON (((60 20, 0 20, 60 60, 60 20)), ((60 100, 60 60, 100 60, 100 100, 60 100)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 574</desc>
+  <a>
+    POLYGON ((160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 575</desc>
+  <a>
+    POLYGON ((300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 576</desc>
+  <a>
+    MULTIPOLYGON (((120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ((360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 577</desc>
+  <a>
+    MULTIPOLYGON (((100 220, 100 200, 300 200, 300 220, 100 220)), ((280 180, 280 160, 300 160, 300 180, 280 180)), ((220 140, 220 120, 240 120, 240 140, 220 140)), ((180 220, 160 240, 200 240, 180 220)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 578</desc>
+  <a>
+    MULTIPOLYGON (((100 200, 100 180, 120 180, 120 200, 100 200)), ((60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ((280 220, 240 180, 260 160, 300 200, 280 220)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 579</desc>
+  <a>
+    MULTIPOLYGON (((80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ((220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 580</desc>
+  <a>
+    POLYGON ((60 160, 140 160, 140 60, 60 60, 60 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 581</desc>
+  <a>
+    POLYGON ((160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 582</desc>
+  <a>
+    POLYGON ((10 10, 100 10, 10 11, 10 10))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 583</desc>
+  <a>
+    POLYGON ((90 0, 200 0, 200 200, 90 200, 90 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 584</desc>
+  <a>
+    POLYGON ((100 10, 10 10, 90 11, 90 20, 100 20, 100 10))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 585</desc>
+  <a>
+    POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 586</desc>
+  <a>
+    POLYGON ((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 587</desc>
+  <a>
+    POLYGON ((60 40, 40 40, 40 20, 60 20, 60 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 588</desc>
+  <a>
+    POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 589</desc>
+  <a>
+    POLYGON ((0 30, 0 0, 30 0, 30 30, 0 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 590</desc>
+  <a>
+    MULTIPOLYGON (((0 0, 100 0, 100 20, 0 20, 0 0)), ((0 40, 0 21, 100 20, 100 40, 0 40)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 591</desc>
+  <a>
+    POLYGON ((110 30, 90 30, 90 10, 110 10, 110 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 592</desc>
+  <a>
+    POLYGON ((100 10, 0 10, 100 11, 100 10))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 593</desc>
+  <a>
+    POLYGON ((100 10, 0 10, 90 11, 90 20, 100 20, 100 10))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 594</desc>
+  <a>
+    POLYGON ((10 30, 10 0, 30 10, 30 30, 10 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 595</desc>
+  <a>
+    POLYGON ((10 30, 10 10, 30 10, 30 30, 10 30))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 596</desc>
+  <a>
+    POLYGON ((0 0, 200 0, 0 198, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 597</desc>
+  <a>
+    POLYGON ((280 60, 139 60, 280 70, 280 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 598</desc>
+  <a>
+    POLYGON ((0 0, 140 10, 0 20, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 599</desc>
+  <a>
+    POLYGON ((280 0, 139 10, 280 1, 280 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 600</desc>
+  <a>
+    MULTIPOLYGON (((1 4, 1 1, 2 1, 2 4, 1 4)), ((3 4, 3 1, 4 1, 4 4, 3 4)), ((5 4, 5 1, 6 1, 6 4, 5 4)), ((7 4, 7 1, 8 1, 8 4, 7 4)), ((9 4, 9 1, 10 1, 10 4, 9 4)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 601</desc>
+  <a>
+    POLYGON ((0 2, 11 3, 11 2, 0 2))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 602</desc>
+  <a>
+    POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 603</desc>
+  <a>
+    POLYGON ((200 160, 160 160, 160 80, 200 80, 200 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 604</desc>
+  <a>
+    LINESTRING (160 140, 160 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 605</desc>
+  <a>
+    POLYGON ((20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 606</desc>
+  <a>
+    POLYGON ((200 160, 150 160, 150 80, 200 80, 200 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 607</desc>
+  <a>
+    POLYGON ((83 33, 62 402, 68 402, 83 33))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 608</desc>
+  <a>
+    POLYGON ((78 39, 574 76, 576 60, 78 39))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 609</desc>
+  <a>
+    LINESTRING (240 190, 120 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 610</desc>
+  <a>
+    POLYGON ((110 240, 50 80, 240 70, 110 240))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 611</desc>
+  <a>
+    LINESTRING (0 100, 100 100, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 612</desc>
+  <a>
+    POLYGON ((30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 613</desc>
+  <a>
+    LINESTRING (40 340, 200 250, 120 180, 160 110, 270 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 614</desc>
+  <a>
+    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> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 615</desc>
+  <a>
+    MULTILINESTRING ((100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 616</desc>
+  <a>
+    MULTIPOLYGON (((60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ((100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 617</desc>
+  <a>
+    MULTILINESTRING ((40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 618</desc>
+  <a>
+    MULTIPOLYGON (((60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ((280 400, 320 400, 320 360, 280 360, 280 400)), ((300 240, 300 220, 320 220, 320 240, 300 240)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 619</desc>
+  <a>
+    MULTILINESTRING ((80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 620</desc>
+  <a>
+    MULTIPOLYGON (((120 180, 60 80, 180 80, 120 180)), ((100 240, 140 240, 120 220, 100 240)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 621</desc>
+  <a>
+    MULTILINESTRING ((180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 622</desc>
+  <a>
+    POLYGON ((95 9, 81 414, 87 414, 95 9))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 623</desc>
+  <a>
+    LINESTRING (93 13, 96 13)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 624</desc>
+  <a>
+    LINESTRING (0 0, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 625</desc>
+  <a>
+    LINESTRING (0 100, 100 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 626</desc>
+  <a>
+    LINESTRING (0 0, 100 100, 200 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 627</desc>
+  <a>
+    LINESTRING (0 0, 100 100, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 628</desc>
+  <a>
+    LINESTRING (40 360, 40 220, 120 360)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 629</desc>
+  <a>
+    LINESTRING (120 340, 60 220, 140 220, 140 360)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 630</desc>
+  <a>
+    LINESTRING (220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 631</desc>
+  <a>
+    LINESTRING (220 240, 140 160, 120 180, 220 280, 200 300, 100 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 632</desc>
+  <a>
+    LINESTRING (80 320, 220 320, 220 160, 80 300)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 633</desc>
+  <a>
+    LINESTRING (60 200, 60 260, 140 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 634</desc>
+  <a>
+    LINESTRING (60 200, 60 140, 140 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 635</desc>
+  <a>
+    LINESTRING (180 200, 100 280, 20 200, 100 120, 180 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 636</desc>
+  <a>
+    LINESTRING (100 200, 220 200, 220 80, 100 80, 100 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 637</desc>
+  <a>
+    LINESTRING (0 10, 620 10, 0 11)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 638</desc>
+  <a>
+    LINESTRING (400 60, 400 10)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 639</desc>
+  <a>
+    MULTIPOLYGON (((120 320, 180 200, 240 320, 120 320)), ((180 200, 240 80, 300 200, 180 200)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 640</desc>
+  <a>
+    MULTIPOINT (120 320, 180 260, 180 320, 180 200, 300 200, 200 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 641</desc>
+  <a>
+    MULTIPOLYGON (((120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ((200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 642</desc>
+  <a>
+    MULTIPOINT (200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 643</desc>
+  <a>
+    MULTIPOINT (40 90, 20 20, 70 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 644</desc>
+  <a>
+    LINESTRING (20 20, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 645</desc>
+  <a>
+    LINESTRING (20 20, 110 110, 170 50, 130 10, 70 70)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 646</desc>
+  <a>
+    MULTILINESTRING ((100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 647</desc>
+  <a>
+    MULTIPOINT (100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 648</desc>
+  <a>
+    MULTILINESTRING ((-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 649</desc>
+  <a>
+    MULTIPOINT (-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 650</desc>
+  <a>
+    MULTILINESTRING ((180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 651</desc>
+  <a>
+    POINT (200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 652</desc>
+  <a>
+    MULTIPOINT (100 100, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 653</desc>
+  <a>
+    MULTIPOINT (100 100, 200 200, 300 300, 500 500)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 654</desc>
+  <a>
+    MULTIPOINT (100 100, 200 200, 400 400, 600 600)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 655</desc>
+  <a>
+    POINT (80 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 656</desc>
+  <a>
+    POINT (260 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 657</desc>
+  <a>
+    POINT (60 260)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 658</desc>
+  <a>
+    POINT (120 260)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 659</desc>
+  <a>
+    POINT (80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 660</desc>
+  <a>
+    POINT (80 280)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 661</desc>
+  <a>
+    POLYGON ((0 0, 140 0, 140 140, 0 140, 0 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 662</desc>
+  <a>
+    POLYGON ((140 0, 0 0, 0 140, 140 140, 140 0))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 663</desc>
+  <a>
+    POLYGON ((40 60, 360 60, 360 300, 40 300, 40 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 664</desc>
+  <a>
+    POLYGON ((120 100, 280 100, 280 240, 120 240, 120 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 665</desc>
+  <a>
+    POLYGON ((80 100, 360 100, 360 280, 80 280, 80 100))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 666</desc>
+  <a>
+    POLYGON ((0 280, 0 0, 260 0, 260 280, 0 280), (220 240, 40 240, 40 40, 220 40, 220 240))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 667</desc>
+  <a>
+    POLYGON ((20 260, 240 260, 240 20, 20 20, 20 260), (160 180, 80 180, 120 120, 160 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 668</desc>
+  <a>
+    POLYGON ((60 80, 200 80, 200 220, 60 220, 60 80))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 669</desc>
+  <a>
+    POLYGON ((120 140, 260 140, 260 260, 120 260, 120 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 670</desc>
+  <a>
+    POLYGON ((60 220, 220 220, 140 140, 60 220))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 671</desc>
+  <a>
+    POLYGON ((100 180, 180 180, 180 100, 100 100, 100 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 672</desc>
+  <a>
+    POLYGON ((40 40, 180 40, 180 180, 40 180, 40 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 673</desc>
+  <a>
+    POLYGON ((180 40, 40 180, 160 280, 300 140, 180 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 674</desc>
+  <a>
+    POLYGON ((40 280, 200 280, 200 100, 40 100, 40 280), (100 220, 120 220, 120 200, 100 180, 100 220))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 675</desc>
+  <a>
+    POLYGON ((40 280, 180 260, 180 120, 60 120, 40 280))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 676</desc>
+  <a>
+    POLYGON ((0 200, 0 0, 200 0, 200 200, 0 200), (20 180, 130 180, 130 30, 20 30, 20 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 677</desc>
+  <a>
+    POLYGON ((60 90, 130 90, 130 30, 60 30, 60 90))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 678</desc>
+  <a>
+    LINESTRING (100 120, 100 240)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 679</desc>
+  <a>
+    POLYGON ((40 60, 160 60, 160 180, 40 180, 40 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 680</desc>
+  <a>
+    LINESTRING (80 80, 140 140, 200 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 681</desc>
+  <a>
+    POLYGON ((40 40, 140 40, 140 140, 40 140, 40 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 682</desc>
+  <a>
+    POLYGON ((190 190, 360 20, 20 20, 190 190), (111 110, 250 100, 140 30, 111 110))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 683</desc>
+  <a>
+    POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 131 40, 200 110, 130 180))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 684</desc>
+  <a>
+    LINESTRING (100 140, 100 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 685</desc>
+  <a>
+    MULTIPOLYGON (((20 80, 180 79, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 686</desc>
+  <a>
+    MULTIPOLYGON (((20 80, 180 80, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 687</desc>
+  <a>
+    LINESTRING (60 0, 20 80, 100 80, 80 120, 40 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 688</desc>
+  <a>
+    LINESTRING (140 300, 220 160, 260 200, 240 260)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 689</desc>
+  <a>
+    LINESTRING (60 40, 140 40, 140 160, 0 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 690</desc>
+  <a>
+    LINESTRING (140 280, 240 280, 240 180, 140 180, 140 280)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 691</desc>
+  <a>
+    LINESTRING (140 0, 0 0, 40 60, 0 120, 60 200, 220 160, 220 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 692</desc>
+  <a>
+    LINESTRING (80 140, 180 100, 160 40, 100 40, 60 100, 80 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 693</desc>
+  <a>
+    LINESTRING (20 20, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 694</desc>
+  <a>
+    LINESTRING (40 40, 160 160, 200 60, 60 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 695</desc>
+  <a>
+    LINESTRING (40 40, 200 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 696</desc>
+  <a>
+    LINESTRING (200 40, 140 40, 40 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 697</desc>
+  <a>
+    LINESTRING (0 0, 110 0, 60 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 698</desc>
+  <a>
+    LINESTRING (0 0, 110 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 699</desc>
+  <a>
+    LINESTRING (0 0, 80 0, 80 60, 80 0, 170 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 700</desc>
+  <a>
+    MULTILINESTRING ((0 0, 170 0), (80 0, 80 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 701</desc>
+  <a>
+    LINESTRING (80 100, 180 200)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 702</desc>
+  <a>
+    LINESTRING (80 180, 180 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 703</desc>
+  <a>
+    LINESTRING (40 40, 100 100, 160 160)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 704</desc>
+  <a>
+    LINESTRING (160 60, 100 100, 60 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 705</desc>
+  <a>
+    LINESTRING (140 60, 60 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 706</desc>
+  <a>
+    LINESTRING (40 40, 180 180, 100 180, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 707</desc>
+  <a>
+    LINESTRING (80 90, 50 50, 0 0)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 708</desc>
+  <a>
+    LINESTRING (40 140, 240 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 709</desc>
+  <a>
+    LINESTRING (40 140, 100 140, 80 80, 120 60, 100 140, 160 140, 160 100, 200 100, 160 140, 240 140)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 710</desc>
+  <a>
+    LINESTRING (20 20, 100 20, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 711</desc>
+  <a>
+    LINESTRING (60 20, 200 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 712</desc>
+  <a>
+    LINESTRING (40 60, 180 60, 180 140, 100 140, 100 60, 220 60, 220 180, 80 180, 80 60, 280 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 713</desc>
+  <a>
+    LINESTRING (140 60, 180 60, 220 60, 260 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 714</desc>
+  <a>
+    MULTIPOINT (0 20, 40 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 715</desc>
+  <a>
+    POLYGON ((20 40, 20 0, 60 0, 60 40, 20 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 716</desc>
+  <a>
+    MULTIPOINT (0 20, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 717</desc>
+  <a>
+    MULTIPOINT (20 20, 40 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 718</desc>
+  <a>
+    MULTIPOINT (80 260, 140 260, 180 260)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 719</desc>
+  <a>
+    POLYGON ((40 320, 140 320, 140 200, 40 200, 40 320))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 720</desc>
+  <a>
+    MULTIPOLYGON (((0 40, 0 0, 40 0, 40 40, 0 40)), ((40 80, 40 40, 80 40, 80 80, 40 80)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 721</desc>
+  <a>
+    LINESTRING (40 40, 120 120, 200 120)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 722</desc>
+  <a>
+    LINESTRING (40 40, 100 100, 160 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 723</desc>
+  <a>
+    POINT (60 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 724</desc>
+  <a>
+    MULTIPOINT (40 40, 100 40)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 725</desc>
+  <a>
+    LINESTRING (40 40, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 726</desc>
+  <a>
+    MULTIPOINT (40 40, 60 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 727</desc>
+  <a>
+    MULTIPOINT (60 60, 100 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 728</desc>
+  <a>
+    LINESTRING (40 40, 60 60, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 729</desc>
+  <a>
+    POINT (20 30)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 730</desc>
+  <a>
+    MULTIPOINT (40 40, 80 60, 40 100)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 731</desc>
+  <a>
+    MULTIPOINT (80 280, 80 220, 160 220, 80 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 732</desc>
+  <a>
+    MULTIPOINT (80 280, 80 220, 160 220)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 733</desc>
+  <a>
+    MULTIPOINT EMPTY
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 734</desc>
+  <a>
+    LINESTRING (20 60, 160 60, 80 160, 80 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 735</desc>
+  <a>
+    LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 736</desc>
+  <a>
+    LINESTRING (20 60, 100 60, 60 100, 60 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 737</desc>
+  <a>
+    LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 738</desc>
+  <a>
+    LINESTRING (20 20, 80 20, 80 80, 20 20)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 739</desc>
+  <a>
+    LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80)
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 740</desc>
+  <a>
+    LINESTRING EMPTY
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 741</desc>
+  <a>
+    MULTILINESTRING ((40 140, 160 40), (160 140, 40 40))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 742</desc>
+  <a>
+    MULTILINESTRING ((20 160, 20 20), (100 160, 100 20))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 743</desc>
+  <a>
+    MULTILINESTRING ((60 140, 20 80, 60 40), (60 40, 100 80, 60 140))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 744</desc>
+  <a>
+    MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), (100 200, 200 120))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 745</desc>
+  <a>
+    MULTILINESTRING ((40 120, 100 60), (160 120, 100 60), (40 60, 160 60))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 746</desc>
+  <a>
+    MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), (80 160, 120 220, 120 100, 80 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 747</desc>
+  <a>
+    MULTILINESTRING ((80 160, 40 220), (80 160, 120 220, 120 100, 80 160), (40 100, 80 160))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 748</desc>
+  <a>
+    POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 749</desc>
+  <a>
+    POLYGON EMPTY
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 750</desc>
+  <a>
+    MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+<case>
+  <desc>Test 751</desc>
+  <a>
+    MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340)))
+  </a>
+  <test> <op name="isValid" arg1="A"> true </op> </test>
+</case>
+</run>



More information about the geos-commits mailing list