[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