1-- POINT --
2SELECT g,
3      ST_AsText(g::geometry),
4      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
5'POINT EMPTY'
6::text as g ) as foo;
7
8SELECT g,
9      ST_AsText(g::geometry),
10      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
11'POINT(EMPTY)'
12::text as g ) as foo;
13
14SELECT g,
15      ST_AsText(g::geometry),
16      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
17'POINT(0 0)'
18::text as g ) as foo;
19
20SELECT g,
21      ST_AsText(g::geometry),
22      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
23'POINT Z (0 0 0)'
24::text as g ) as foo;
25
26SELECT g,
27      ST_AsText(g::geometry),
28      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
29'POINT M (0 0 0)'
30::text as g ) as foo;
31
32SELECT g,
33      ST_AsText(g::geometry),
34      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
35'POINT ZM (0 0 0 0)'
36::text as g ) as foo;
37
38SELECT g,
39      ST_AsText(g::geometry),
40      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
41'POINT ZM (0 0 0)' -- broken, misses an ordinate value
42::text as g ) as foo;
43
44SELECT g,
45      ST_AsText(g::geometry),
46      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
47'POINT((0 0))'
48::text as g ) as foo;
49
50-- MULTIPOINT --
51
52SELECT g,
53      ST_AsText(g::geometry),
54      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
55'MULTIPOINT EMPTY'
56::text as g ) as foo;
57
58SELECT g,
59      ST_AsText(g::geometry),
60      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
61'MULTIPOINT(EMPTY)'
62::text as g ) as foo;
63
64-- This is supported for backward compatibility
65SELECT g,
66      ST_AsText(g::geometry),
67      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
68'MULTIPOINT(0 0, 2 0)'
69::text as g ) as foo;
70
71SELECT g,
72      ST_AsText(g::geometry),
73      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
74'MULTIPOINT((0 0), (2 0))'
75::text as g ) as foo;
76
77SELECT g,
78      ST_AsText(g::geometry),
79      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
80'MULTIPOINT((0 0), (2 0), EMPTY)'
81::text as g ) as foo;
82
83SELECT g,
84      ST_AsText(g::geometry),
85      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
86'MULTIPOINT Z ((0 0 0), (2 0 0))'
87::text as g ) as foo;
88
89SELECT g,
90      ST_AsText(g::geometry),
91      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
92'MULTIPOINT M ((0 0 0), (2 0 0))'
93::text as g ) as foo;
94
95SELECT g,
96      ST_AsText(g::geometry),
97      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
98'MULTIPOINT ZM ((0 0 0 0), (2 0 0 0))'
99::text as g ) as foo;
100
101-- LINESTRING --
102
103SELECT g,
104      ST_AsText(g::geometry),
105      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
106'LINESTRING EMPTY'
107::text as g ) as foo;
108
109SELECT g,
110      ST_AsText(g::geometry),
111      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
112'LINESTRING(EMPTY)'
113::text as g ) as foo;
114
115SELECT g,
116      ST_AsText(g::geometry),
117      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
118'LINESTRING(0 0, 1 1)'
119::text as g ) as foo;
120
121SELECT g,
122      ST_AsText(g::geometry),
123      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
124'LINESTRING((0 0, 1 1))'
125::text as g ) as foo;
126
127SELECT g,
128      ST_AsText(g::geometry),
129      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
130'LINESTRING((0 0), (1 1))'
131::text as g ) as foo;
132
133SELECT g,
134      ST_AsText(g::geometry),
135      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
136'LINESTRING Z (0 0 0, 1 1 0)'
137::text as g ) as foo;
138
139SELECT g,
140      ST_AsText(g::geometry),
141      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
142'LINESTRING M (0 0 0, 1 1 0)'
143::text as g ) as foo;
144
145SELECT g,
146      ST_AsText(g::geometry),
147      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
148'LINESTRING ZM (0 0 0 0, 1 1 0 0)'
149::text as g ) as foo;
150
151-- MULTILINESTRING --
152
153SELECT g,
154      ST_AsText(g::geometry),
155      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
156'MULTILINESTRING EMPTY'
157::text as g ) as foo;
158
159SELECT g,
160      ST_AsText(g::geometry),
161      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
162'MULTILINESTRING(EMPTY)'
163::text as g ) as foo;
164
165SELECT g,
166      ST_AsText(g::geometry),
167      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
168'MULTILINESTRING(0 0, 2 0)'
169::text as g ) as foo;
170
171SELECT g,
172      ST_AsText(g::geometry),
173      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
174'MULTILINESTRING((0 0, 2 0))'
175::text as g ) as foo;
176
177SELECT g,
178      ST_AsText(g::geometry),
179      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
180'MULTILINESTRING((0 0, 2 0), (1 1, 2 2))'
181::text as g ) as foo;
182
183SELECT g,
184      ST_AsText(g::geometry),
185      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
186'MULTILINESTRING((0 0, 2 0), (1 1, 2 2), EMPTY)'
187::text as g ) as foo;
188
189SELECT g,
190      ST_AsText(g::geometry),
191      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
192'MULTILINESTRING((0 0, 2 0), (1 1, 2 2), (EMPTY))'
193::text as g ) as foo;
194
195SELECT g,
196      ST_AsText(g::geometry),
197      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
198'MULTILINESTRING Z ((0 0 0, 2 0 0), (1 1 0, 2 2 0))'
199::text as g ) as foo;
200
201SELECT g,
202      ST_AsText(g::geometry),
203      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
204'MULTILINESTRING M ((0 0 0, 2 0 0), (1 1 0, 2 2 0))'
205::text as g ) as foo;
206
207SELECT g,
208      ST_AsText(g::geometry),
209      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
210'MULTILINESTRING ZM ((0 0 0 0, 2 0 0 0), (1 1 0 0, 2 2 0 0))'
211::text as g ) as foo;
212
213-- POLYGON --
214
215SELECT g,
216      ST_AsText(g::geometry),
217      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
218'POLYGON EMPTY'
219::text as g ) as foo;
220
221SELECT g,
222      ST_AsText(g::geometry),
223      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
224'POLYGON(EMPTY)'
225::text as g ) as foo;
226
227SELECT g,
228      ST_AsText(g::geometry),
229      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
230'POLYGON((0 0,1 0,1 1,0 1,0 0))'
231::text as g ) as foo;
232
233SELECT g,
234      ST_AsText(g::geometry),
235      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
236'POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'
237::text as g ) as foo;
238
239SELECT g,
240      ST_AsText(g::geometry),
241      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
242'POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))'
243::text as g ) as foo;
244
245SELECT g,
246      ST_AsText(g::geometry),
247      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
248'POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))'
249::text as g ) as foo;
250
251SELECT g,
252      ST_AsText(g::geometry),
253      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
254'POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))'
255::text as g ) as foo;
256
257-- MULTIPOLYGON --
258
259SELECT g,
260      ST_AsText(g::geometry),
261      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
262'MULTIPOLYGON EMPTY'
263::text as g ) as foo;
264
265SELECT g,
266      ST_AsText(g::geometry),
267      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
268'MULTIPOLYGON(EMPTY)'
269::text as g ) as foo;
270
271SELECT g,
272      ST_AsText(g::geometry),
273      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
274'MULTIPOLYGON((EMPTY))'
275::text as g ) as foo;
276
277SELECT g,
278      ST_AsText(g::geometry),
279      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
280'MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))'
281::text as g ) as foo;
282
283SELECT g,
284      ST_AsText(g::geometry),
285      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
286'MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))'
287::text as g ) as foo;
288
289SELECT g,
290      ST_AsText(g::geometry),
291      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
292'MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))'
293::text as g ) as foo;
294
295SELECT g,
296      ST_AsText(g::geometry),
297      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
298'MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))'
299::text as g ) as foo;
300
301-- GEOMETRYCOLLECTION --
302
303SELECT g,
304      ST_AsText(g::geometry),
305      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
306'GEOMETRYCOLLECTION EMPTY'
307::text as g ) as foo;
308
309-- This is supported for backward compatibility
310SELECT g,
311      ST_AsText(g::geometry),
312      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
313'GEOMETRYCOLLECTION(EMPTY)'
314::text as g ) as foo;
315
316SELECT g,
317      ST_AsText(g::geometry),
318      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
319'GEOMETRYCOLLECTION((EMPTY))'
320::text as g ) as foo;
321
322SELECT g,
323      ST_AsText(g::geometry),
324      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
325'GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0, 2 0),(1 1, 2 2)))'
326::text as g ) as foo;
327
328SELECT g,
329      ST_AsText(g::geometry),
330      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
331'GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT Z (0 0 5),MULTILINESTRING Z ((0 0 5, 2 0 5),(1 1 5, 2 2 5)))'
332::text as g ) as foo;
333
334SELECT g,
335      ST_AsText(g::geometry),
336      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
337'GEOMETRYCOLLECTION M (MULTIPOLYGON M (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT M (0 0 5),MULTILINESTRING M ((0 0 5, 2 0 5),(1 1 5, 2 2 5)))'
338::text as g ) as foo;
339
340SELECT g,
341      ST_AsText(g::geometry),
342      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
343'GEOMETRYCOLLECTION ZM (MULTIPOLYGON ZM (((0 0 5 4,10 0 5 4,10 10 5 4,0 10 5 4,0 0 5 4),(2 2 5 4,2 5 5 4,5 5 5 4,5 2 5 4,2 2 5 4))),POINT ZM (0 0 5 4),MULTILINESTRING ZM ((0 0 5 4, 2 0 5 4),(1 1 5 4, 2 2 5 4)))'
344::text as g ) as foo;
345
346-- CIRCULARSTRING --
347
348SELECT g, -- invalid
349      ST_AsText(g::geometry),
350      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
351'CIRCULARSTRING(EMPTY)'
352::text as g ) as foo;
353
354SELECT g, -- invalid
355      ST_AsText(g::geometry),
356      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
357'CIRCULARSTRING((0 0, 1 1, 2 2))'
358::text as g ) as foo;
359
360SELECT g, -- invalid
361      ST_AsText(g::geometry),
362      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
363'CIRCULARSTRING(0 0, 1 1)'
364::text as g ) as foo;
365
366SELECT g,
367      ST_AsText(g::geometry),
368      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
369'CIRCULARSTRING EMPTY'
370::text as g ) as foo;
371
372SELECT g,
373      ST_AsText(g::geometry),
374      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
375'CIRCULARSTRING(0 0, 1 1, 3 3)'
376::text as g ) as foo;
377
378SELECT g,
379      ST_AsText(g::geometry),
380      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
381'CIRCULARSTRING Z (0 0 0, 1 1 0, 2 3 4)'
382::text as g ) as foo;
383
384SELECT g,
385      ST_AsText(g::geometry),
386      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
387'CIRCULARSTRING M (0 0 0, 1 1 0, 3 4 5)'
388::text as g ) as foo;
389
390SELECT g,
391      ST_AsText(g::geometry),
392      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
393'CIRCULARSTRING ZM (0 0 0 0, 1 1 0 0, 1 2 3 4)'
394::text as g ) as foo;
395
396-- COMPOUNDCURVE --
397
398SELECT g, -- invalid (missing point)
399      ST_AsText(g::geometry),
400      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
401'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 0),(1 0,0 1))'
402::text as g ) as foo;
403
404SELECT g, -- invalid (non continuous curve)
405      ST_AsText(g::geometry),
406      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
407'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 2,0 1))'
408::text as g ) as foo;
409
410SELECT g,
411      ST_AsText(g::geometry),
412      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
413'COMPOUNDCURVE EMPTY'
414::text as g ) as foo;
415
416SELECT g,
417      ST_AsText(g::geometry),
418      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
419'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))'
420::text as g ) as foo;
421
422SELECT g,
423      ST_AsText(g::geometry),
424      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
425'COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))'
426::text as g ) as foo;
427
428SELECT g,
429      ST_AsText(g::geometry),
430      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
431'COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))'
432::text as g ) as foo;
433
434SELECT g,
435      ST_AsText(g::geometry),
436      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
437'COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5))'
438::text as g ) as foo;
439
440-- CURVEPOLYGON --
441
442SELECT g, -- invalid (non continuous curve)
443      ST_AsText(g::geometry),
444      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
445'CURVEPOLYGON (COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 2,0 1)))'
446::text as g ) as foo;
447
448SELECT g, -- invalid (requires more points -- is this correct?)
449      ST_AsText(g::geometry),
450      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
451'CURVEPOLYGON (COMPOUNDCURVE EMPTY)'
452::text as g ) as foo;
453
454SELECT g, -- invalid (non-closed rings)
455      ST_AsText(g::geometry),
456      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
457'CURVEPOLYGON (COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)))'
458::text as g ) as foo;
459
460SELECT g,
461      ST_AsText(g::geometry),
462      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
463'CURVEPOLYGON EMPTY'
464::text as g ) as foo;
465
466SELECT g,
467      ST_AsText(g::geometry),
468      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
469'CURVEPOLYGON (COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2),(0 1 2, 0 0 2)))'
470::text as g ) as foo;
471
472SELECT g,
473      ST_AsText(g::geometry),
474      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
475'CURVEPOLYGON (COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2, 0 0 2)))'
476::text as g ) as foo;
477
478SELECT g,
479      ST_AsText(g::geometry),
480      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
481'CURVEPOLYGON (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5, 1 10 3 5, 0 0 2 5)))'
482::text as g ) as foo;
483
484SELECT g,
485      ST_AsText(g::geometry),
486      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
487'CURVEPOLYGON(COMPOUNDCURVE((5 5 1 0,5 0 1 1,0 0 1 2,0 5 1 3), CIRCULARSTRING(0 5 1 3,1.5 7.5 1 4,5 5 1 0)),(1.5 5 2 0,2.5 6 3 1,3.5 5 2 2,1.5 5 2 0), COMPOUNDCURVE(CIRCULARSTRING(1.5 2 2 0,1 2.5 3 1,3.5 2 2 2),(3.5 2 2 2,3.5 4 1 3,1.5 4 1 4,1.5 2 2 0)))'
488::text as g ) as foo;
489
490-- MULTICURVE --
491
492SELECT g,
493      ST_AsText(g::geometry),
494      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
495'MULTICURVE EMPTY'
496::text as g ) as foo;
497
498SELECT g,
499      ST_AsText(g::geometry),
500      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
501'MULTICURVE ((5 5, 3 5, 3 3, 0 3), CIRCULARSTRING (0 0, 0.2 1, 0.5 1.4), COMPOUNDCURVE (CIRCULARSTRING (0 0,1 1,1 0),(1 0,0 1)))'
502::text as g ) as foo;
503
504SELECT g,
505      ST_AsText(g::geometry),
506      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
507'MULTICURVE M ((5 5 1, 3 5 2, 3 3 3, 0 3 1), CIRCULARSTRING M (0 0 0, 0.2 1 3, 0.5 1.4 1), COMPOUNDCURVE M (CIRCULARSTRING M (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))'
508::text as g ) as foo;
509
510SELECT g,
511      ST_AsText(g::geometry),
512      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
513'MULTICURVE Z ((5 5 1, 3 5 2, 3 3 3, 0 3 1), CIRCULARSTRING Z (0 0 0, 0.2 1 3, 0.5 1.4 1), COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))'
514::text as g ) as foo;
515
516SELECT g,
517      ST_AsText(g::geometry),
518      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
519'MULTICURVE ZM ((5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1), CIRCULARSTRING ZM (0 0 0 0, 0.2 1 3 -2, 0.5 1.4 1 2), COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 0 0,1 1 1 2,1 0 0 1),(1 0 0 1,0 1 5 4)))'
520::text as g ) as foo;
521
522-- MULTISURFACE --
523
524SELECT g,
525      ST_AsText(g::geometry),
526      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
527'MULTISURFACE EMPTY'
528::text as g ) as foo;
529
530SELECT g,
531      ST_AsText(g::geometry),
532      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
533'MULTISURFACE (CURVEPOLYGON (CIRCULARSTRING (-2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))'
534::text as g ) as foo;
535
536SELECT g,
537      ST_AsText(g::geometry),
538      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
539'MULTISURFACE M (CURVEPOLYGON M (CIRCULARSTRING M (-2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))'
540::text as g ) as foo;
541
542SELECT g,
543      ST_AsText(g::geometry),
544      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
545'MULTISURFACE Z (CURVEPOLYGON Z (CIRCULARSTRING Z (-2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))'
546::text as g ) as foo;
547
548SELECT g,
549      ST_AsText(g::geometry),
550      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
551'MULTISURFACE ZM (CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8)))'
552::text as g ) as foo;
553
554-- POLYHEDRALSURFACE --
555
556SELECT g,
557      ST_AsText(g::geometry),
558      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
559'POLYHEDRALSURFACE EMPTY'
560::text as g ) as foo;
561
562SELECT g,
563      ST_AsText(g::geometry),
564      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
565'POLYHEDRALSURFACE (((0 0,0 0,0 1,0 0)),((0 0,0 1,1 0,0 0)),((0 0,1 0,0 0,0 0)),((1 0,0 1,0 0,1 0)))'
566::text as g ) as foo;
567
568SELECT g,
569      ST_AsText(g::geometry),
570      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
571'POLYHEDRALSURFACE M (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))'
572::text as g ) as foo;
573
574SELECT g,
575      ST_AsText(g::geometry),
576      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
577'POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))'
578::text as g ) as foo;
579
580SELECT g,
581      ST_AsText(g::geometry),
582      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
583'POLYHEDRALSURFACE ZM (((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))'
584::text as g ) as foo;
585
586-- TRIANGLE --
587
588SELECT g,  -- invalid (non-closed ring)
589      ST_AsText(g::geometry),
590      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
591'TRIANGLE ((1 2 3,4 5 6,7 8 9,1 2 0))'
592::text as g ) as foo;
593
594SELECT g,
595      ST_AsText(g::geometry),
596      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
597'TRIANGLE EMPTY'
598::text as g ) as foo;
599
600SELECT g,
601      ST_AsText(g::geometry),
602      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
603'TRIANGLE ((1 2 3,4 5 6,7 8 9,1 2 3))'
604::text as g ) as foo;
605
606SELECT g,
607      ST_AsText(g::geometry),
608      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
609'TRIANGLE M ((1 2 3,4 5 6,7 8 9,1 2 3))'
610::text as g ) as foo;
611
612SELECT g,
613      ST_AsText(g::geometry),
614      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
615'TRIANGLE Z ((1 2 3,4 5 6,7 8 9,1 2 3))'
616::text as g ) as foo;
617
618SELECT g,
619      ST_AsText(g::geometry),
620      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
621'TRIANGLE ZM ((1 2 3 -1,4 5 6 -2,7 8 9 -3,1 2 3 -1))'
622::text as g ) as foo;
623
624-- TIN --
625
626SELECT g,  -- invalid (non-closed ring)
627      ST_AsText(g::geometry),
628      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
629'TIN ZM ( ((0 0 0 0, 0 0 1 0, 0 1 0 4, 0 0 0 0)), ((0 0 0 1, 0 1 0 2, 1 1 0 3, 0 1 0 1)) )'
630::text as g ) as foo;
631
632SELECT g,
633      ST_AsText(g::geometry),
634      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
635'TIN EMPTY'
636::text as g ) as foo;
637
638SELECT g,
639      ST_AsText(g::geometry),
640      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
641'TIN ( ((0 0, 0 0, 0 1, 0 0)), ((0 0, 0 1, 1 1, 0 0)) )'
642::text as g ) as foo;
643
644SELECT g,
645      ST_AsText(g::geometry),
646      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
647'TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )'
648::text as g ) as foo;
649
650SELECT g,
651      ST_AsText(g::geometry),
652      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
653'TIN M ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )'
654::text as g ) as foo;
655
656SELECT g,
657      ST_AsText(g::geometry),
658      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
659'TIN ZM ( ((0 0 0 0, 0 0 1 0, 0 1 0 4, 0 0 0 0)), ((0 0 0 1, 0 1 0 2, 1 1 0 3, 0 0 0 1)) )'
660::text as g ) as foo;
661
662