]> granicus.if.org Git - postgis/commitdiff
Fix bug in gbox_same -> lwgeom_same -> ST_OrderingEquals (#1454)
authorSandro Santilli <strk@keybit.net>
Wed, 11 Jan 2012 18:45:00 +0000 (18:45 +0000)
committerSandro Santilli <strk@keybit.net>
Wed, 11 Jan 2012 18:45:00 +0000 (18:45 +0000)
Adds regression test for lwgeom_same and ST_OrderingEquals

git-svn-id: http://svn.osgeo.org/postgis/trunk@8779 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/cunit/cu_libgeom.c
liblwgeom/g_box.c
regress/tickets.sql
regress/tickets_expected

index ad16ad8f101768a4041199189c27ae47ba2534a2..8adb720ca6b9bfb2959e3f984fcf4c3e75b8eb94 100644 (file)
@@ -699,7 +699,6 @@ static void test_lwgeom_force_clockwise(void)
 static void test_lwgeom_is_empty(void)
 {
        LWGEOM *geom;
-       char *in_ewkt, *out_ewkt;
 
        geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE);
        CU_ASSERT( !lwgeom_is_empty(geom) );
@@ -735,6 +734,101 @@ static void test_lwgeom_is_empty(void)
 
 }
 
+/*
+ * Test lwgeom_same
+ */
+static void test_lwgeom_same(void)
+{
+       LWGEOM *geom, *geom2;
+
+       geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("LINESTRING(0 0, 2 0)", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTILINESTRING((0 0, 2 0))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTIPOINT((0 0),(4 5))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("LINESTRING EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_add_bbox(geom);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("POLYGON EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTIPOINT EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTILINESTRING EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("MULTIPOLYGON EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( lwgeom_same(geom, geom) );
+       lwgeom_free(geom);
+
+       geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE);
+       geom2 = lwgeom_from_wkt("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( ! lwgeom_same(geom, geom2) );
+       lwgeom_free(geom);
+       lwgeom_free(geom2);
+
+       geom = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE);
+       geom2 = lwgeom_from_wkt("MULTIPOINT((0 0))", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( ! lwgeom_same(geom, geom2) );
+       lwgeom_free(geom);
+       lwgeom_free(geom2);
+
+       geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE);
+       geom2 = lwgeom_from_wkt("POINT Z EMPTY", LW_PARSER_CHECK_NONE);
+       CU_ASSERT( ! lwgeom_same(geom, geom2) );
+       lwgeom_free(geom);
+       lwgeom_free(geom2);
+
+}
+
 
 /*
 ** Used by test harness to register the tests in this file.
@@ -758,6 +852,7 @@ CU_TestInfo libgeom_tests[] =
        PG_TEST(test_lwgeom_force_clockwise),
        PG_TEST(test_lwgeom_calculate_gbox),
        PG_TEST(test_lwgeom_is_empty),
+       PG_TEST(test_lwgeom_same),
        CU_TEST_INFO_NULL
 };
 CU_SuiteInfo libgeom_suite = {"libgeom",  NULL,  NULL, libgeom_tests};
index d65adc3afb30535a247a9cdb08126ed0c6bcacc8..fb6bcf521a03b1a77ea0e2a80f93d75ce3452ff6 100644 (file)
@@ -126,7 +126,7 @@ int gbox_same(const GBOX *g1, const GBOX *g2)
                return LW_FALSE;
 
        if ( g1->xmin != g2->xmin || g1->ymin != g2->ymin ||
-            g1->xmax != g2->ymax || g1->ymax != g2->ymax ) return LW_FALSE;
+            g1->xmax != g2->xmax || g1->ymax != g2->ymax ) return LW_FALSE;
 
        if (FLAGS_GET_Z(g1->flags) && (g1->zmin != g2->zmin || g1->zmax != g2->zmax))
                return LW_FALSE;
index 59d3ff057c48e8d3c3453926d6a4030d7262fabb..8220682c7db9ca06741e7b79f9521300d57f44c4 100644 (file)
@@ -507,6 +507,10 @@ SELECT '010C00004002000000010400004001000000010100004000000000000000000000000000
 SELECT '#1453.1', ST_OrderingEquals('POINT EMPTY', 'POINT EMPTY');
 SELECT '#1453.2', ST_OrderingEquals('POINT EMPTY', 'POINT Z EMPTY');
 
+-- #1454
+with inp as ( select 'MULTILINESTRING((0 0, 2 0))'::geometry as g )
+SELECT '#1454', st_orderingequals(g,g) from inp;
+
 -- Clean up
 DELETE FROM spatial_ref_sys;
 
index f148a685430ce1d5f40c4059c82b5fee20ae809d..5df001be142af29b74f1273aebabbb4cddc9eb23 100644 (file)
@@ -169,3 +169,4 @@ ERROR:  MultiCurve cannot contain MultiPoint element
 ERROR:  MultiSurface cannot contain MultiPoint element
 #1453.1|t
 #1453.2|f
+#1454|t