[geos-commits] r3685 - in branches/3.3: . capi tests/unit tests/unit/capi

svn_geos at osgeo.org svn_geos at osgeo.org
Mon Jun 25 03:20:08 PDT 2012


Author: strk
Date: 2012-06-25 03:20:08 -0700 (Mon, 25 Jun 2012)
New Revision: 3685

Added:
   branches/3.3/tests/unit/capi/GEOSPointOnSurfaceTest.cpp
Modified:
   branches/3.3/NEWS
   branches/3.3/capi/geos_ts_c.cpp
   branches/3.3/tests/unit/Makefile.am
Log:
Always return POINT from GEOSPointOnSurface, even for EMPTY (#561)

Modified: branches/3.3/NEWS
===================================================================
--- branches/3.3/NEWS	2012-06-25 10:19:07 UTC (rev 3684)
+++ branches/3.3/NEWS	2012-06-25 10:20:08 UTC (rev 3685)
@@ -5,6 +5,7 @@
     - Correctly increment CAPI lib version from 3.3.3 (#558)
     - Port robustness fix to CentroidArea (#559)
     - Always return POINT from GEOSGetCentroid, even for EMPTY (#560)
+    - Always return POINT from GEOSPointOnSurface, even for EMPTY (#561)
 
 Changes in 3.3.4
 2012-05-31

Modified: branches/3.3/capi/geos_ts_c.cpp
===================================================================
--- branches/3.3/capi/geos_ts_c.cpp	2012-06-25 10:19:07 UTC (rev 3684)
+++ branches/3.3/capi/geos_ts_c.cpp	2012-06-25 10:20:08 UTC (rev 3685)
@@ -2060,8 +2060,8 @@
         if ( ! ret )
         {
             const GeometryFactory* gf = handle->geomFactory;
-            // return an empty collection 
-            return gf->createGeometryCollection();
+            // return an empty point 
+            return gf->createPoint();
         }
         return ret;
     }

Modified: branches/3.3/tests/unit/Makefile.am
===================================================================
--- branches/3.3/tests/unit/Makefile.am	2012-06-25 10:19:07 UTC (rev 3684)
+++ branches/3.3/tests/unit/Makefile.am	2012-06-25 10:20:08 UTC (rev 3685)
@@ -108,6 +108,7 @@
 	capi/GEOSWithinTest.cpp \
 	capi/GEOSSimplifyTest.cpp \
 	capi/GEOSPreparedGeometryTest.cpp \
+  capi/GEOSPointOnSurfaceTest.cpp \
 	capi/GEOSPolygonizer_getCutEdgesTest.cpp \
 	capi/GEOSBufferTest.cpp \
 	capi/GEOSOffsetCurveTest.cpp \

Added: branches/3.3/tests/unit/capi/GEOSPointOnSurfaceTest.cpp
===================================================================
--- branches/3.3/tests/unit/capi/GEOSPointOnSurfaceTest.cpp	                        (rev 0)
+++ branches/3.3/tests/unit/capi/GEOSPointOnSurfaceTest.cpp	2012-06-25 10:20:08 UTC (rev 3685)
@@ -0,0 +1,174 @@
+// $Id$
+// 
+// Test Suite for C-API GEOSPointOnSurface
+
+#include <tut.hpp>
+// geos
+#include <geos_c.h>
+// std
+#include <cstdarg>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+
+namespace tut
+{
+    //
+    // Test Group
+    //
+
+    // Common data used in test cases.
+    struct test_capipointonsurface_data
+    {
+        GEOSGeometry* geom1_;
+        GEOSGeometry* geom2_;
+        GEOSWKTWriter* wktw_;
+        char* wkt_;
+        double area_;
+
+        static void notice(const char *fmt, ...)
+        {
+            std::fprintf( stdout, "NOTICE: ");
+
+            va_list ap;
+            va_start(ap, fmt);
+            std::vfprintf(stdout, fmt, ap);
+            va_end(ap);
+        
+            std::fprintf(stdout, "\n");
+        }
+
+        test_capipointonsurface_data()
+            : geom1_(0), geom2_(0), wkt_(0)
+        {
+            initGEOS(notice, notice);
+            wktw_ = GEOSWKTWriter_create();
+            GEOSWKTWriter_setTrim(wktw_, 1);
+            GEOSWKTWriter_setRoundingPrecision(wktw_, 8);
+        }       
+
+        ~test_capipointonsurface_data()
+        {
+            GEOSGeom_destroy(geom1_);
+            GEOSGeom_destroy(geom2_);
+            GEOSWKTWriter_destroy(wktw_);
+            GEOSFree(wkt_);
+            geom1_ = 0;
+            geom2_ = 0;
+            wkt_ = 0;
+            finishGEOS();
+        }
+
+    };
+
+    typedef test_group<test_capipointonsurface_data> group;
+    typedef group::object object;
+
+    group test_capipointonsurface_group("capi::GEOSPointOnSurface");
+
+    //
+    // Test Cases
+    //
+
+    // Single point
+    template<>
+    template<>
+    void object::test<1>()
+    {
+        geom1_ = GEOSGeomFromWKT("POINT(10 0)");
+
+        ensure( 0 != geom1_ );
+
+        geom2_ = GEOSPointOnSurface(geom1_);
+
+        ensure( 0 != geom2_ );
+
+        wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
+
+        ensure_equals(std::string(wkt_), std::string( "POINT (10 0)"));
+
+    }
+
+    // line
+    template<>
+    template<>
+    void object::test<2>()
+    {
+        geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 5 0, 10 0)");
+
+        ensure( 0 != geom1_ );
+
+        geom2_ = GEOSPointOnSurface(geom1_);
+
+        ensure( 0 != geom2_ );
+
+        wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
+
+        ensure_equals(std::string(wkt_), std::string( "POINT (5 0)"));
+
+    }
+
+    // polygon
+    template<>
+    template<>
+    void object::test<3>()
+    {
+        geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))");
+
+        ensure( 0 != geom1_ );
+
+        geom2_ = GEOSPointOnSurface(geom1_);
+
+        ensure( 0 != geom2_ );
+
+        wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
+
+        ensure_equals(std::string(wkt_), std::string( "POINT (5 5)"));
+
+    }
+
+    // Tiny triangle, see http://trac.osgeo.org/geos/ticket/559
+    template<>
+    template<>
+    void object::test<4>()
+    {
+        geom1_ = GEOSGeomFromWKT(
+"POLYGON(( \
+56.528666666700 25.2101666667, \
+56.529000000000 25.2105000000, \
+56.528833333300 25.2103333333, \
+56.528666666700 25.2101666667))");
+
+        ensure( 0 != geom1_ );
+
+        geom2_ = GEOSPointOnSurface(geom1_);
+
+        ensure( 0 != geom2_ );
+
+        wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
+
+        ensure_equals(std::string(wkt_), std::string( "POINT (56.528833 25.210333)" ) );
+
+    }
+
+    // Empty geometry -- see http://trac.osgeo.org/geos/ticket/560
+    template<>
+    template<>
+    void object::test<5>()
+    {
+        geom1_ = GEOSGeomFromWKT("LINESTRING EMPTY");
+
+        ensure( 0 != geom1_ );
+
+        geom2_ = GEOSPointOnSurface(geom1_);
+
+        ensure( 0 != geom2_ );
+
+        wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
+
+        ensure_equals(std::string(wkt_), std::string( "POINT EMPTY"));
+
+    }
+
+} // namespace tut
+



More information about the geos-commits mailing list