$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r85371 - in trunk: boost/geometry/extensions/nsphere/strategies/cartesian libs/geometry/extensions/test/nsphere
From: barend.gehrels_at_[hidden]
Date: 2013-08-17 07:14:14
Author: barendgehrels
Date: 2013-08-17 07:14:14 EDT (Sat, 17 Aug 2013)
New Revision: 85371
URL: http://svn.boost.org/trac/boost/changeset/85371
Log:
[geometry][extensions] fixed multi_within test which missed a default_strategy, this was the same for within so uncommented the relevant lines there (and added polygon/box)
Text files modified: 
   trunk/boost/geometry/extensions/nsphere/strategies/cartesian/point_in_nsphere.hpp |    47 +++++++++++++++++++++++++++++++-------- 
   trunk/libs/geometry/extensions/test/nsphere/multi_within.cpp                      |     3 ++                                      
   trunk/libs/geometry/extensions/test/nsphere/within.cpp                            |    13 ++++++----                              
   3 files changed, 48 insertions(+), 15 deletions(-)
Modified: trunk/boost/geometry/extensions/nsphere/strategies/cartesian/point_in_nsphere.hpp
==============================================================================
--- trunk/boost/geometry/extensions/nsphere/strategies/cartesian/point_in_nsphere.hpp	Sat Aug 17 06:19:28 2013	(r85370)
+++ trunk/boost/geometry/extensions/nsphere/strategies/cartesian/point_in_nsphere.hpp	2013-08-17 07:14:14 EDT (Sat, 17 Aug 2013)	(r85371)
@@ -15,6 +15,7 @@
 #ifndef BOOST_GEOMETRY_EXTENSIONS_NSPHERE_STRATEGIES_CARTESIAN_POINT_IN_NSPHERE_HPP
 #define BOOST_GEOMETRY_EXTENSIONS_NSPHERE_STRATEGIES_CARTESIAN_POINT_IN_NSPHERE_HPP
 
+#include <cassert>
 
 #include <boost/geometry/core/access.hpp>
 #include <boost/geometry/core/coordinate_dimension.hpp>
@@ -23,9 +24,9 @@
 
 #include <boost/geometry/extensions/nsphere/views/center_view.hpp>
 
-namespace boost { namespace geometry { namespace strategy 
+namespace boost { namespace geometry { namespace strategy
 {
- 
+
 namespace within
 {
 
@@ -67,6 +68,20 @@
 };
 
 
+// For many geometry-in-nsphere, we do not have a strategy yet... but a default strategy should exist
+struct nsphere_dummy
+{
+    template <typename A, typename B>
+    static bool apply(A const& a, B const& b)
+    {
+        // Assertion if called
+        assert(false);
+        return false;
+    }
+};
+
+
+
 } // namespace within
 
 
@@ -79,13 +94,25 @@
 template <typename Point, typename NSphere>
 struct default_strategy
     <
-        point_tag, nsphere_tag, 
-        point_tag, areal_tag, 
-        cartesian_tag, cartesian_tag, 
+        point_tag, nsphere_tag,
+        point_tag, areal_tag,
+        cartesian_tag, cartesian_tag,
         Point, NSphere
     >
 {
-    typedef within::point_in_nsphere<Point, NSphere, within::point_nsphere_within_comparable_distance> type; 
+    typedef within::point_in_nsphere<Point, NSphere, within::point_nsphere_within_comparable_distance> type;
+};
+
+template <typename AnyTag, typename AnyGeometry, typename NSphere>
+struct default_strategy
+    <
+        AnyTag, nsphere_tag,
+        AnyTag, areal_tag,
+        cartesian_tag, cartesian_tag,
+        AnyGeometry, NSphere
+    >
+{
+    typedef within::nsphere_dummy type;
 };
 
 
@@ -99,13 +126,13 @@
 template <typename Point, typename NSphere>
 struct default_strategy
     <
-        point_tag, nsphere_tag, 
-        point_tag, areal_tag, 
-        cartesian_tag, cartesian_tag, 
+        point_tag, nsphere_tag,
+        point_tag, areal_tag,
+        cartesian_tag, cartesian_tag,
         Point, NSphere
     >
 {
-    typedef within::point_in_nsphere<Point, NSphere, within::point_nsphere_covered_by_comparable_distance> type; 
+    typedef within::point_in_nsphere<Point, NSphere, within::point_nsphere_covered_by_comparable_distance> type;
 };
 
 
Modified: trunk/libs/geometry/extensions/test/nsphere/multi_within.cpp
==============================================================================
--- trunk/libs/geometry/extensions/test/nsphere/multi_within.cpp	Sat Aug 17 06:19:28 2013	(r85370)
+++ trunk/libs/geometry/extensions/test/nsphere/multi_within.cpp	2013-08-17 07:14:14 EDT (Sat, 17 Aug 2013)	(r85371)
@@ -49,5 +49,8 @@
     // Multipolygon in circle
     BOOST_CHECK_EQUAL(bg::within(multi_polygon, circle), true);
 
+    multi_polygon.front().outer().insert(multi_polygon.front().outer().begin() + 1, gl_point(10, 10));
+    BOOST_CHECK_EQUAL(bg::within(multi_polygon, circle), false);
+
     return 0;
 }
Modified: trunk/libs/geometry/extensions/test/nsphere/within.cpp
==============================================================================
--- trunk/libs/geometry/extensions/test/nsphere/within.cpp	Sat Aug 17 06:19:28 2013	(r85370)
+++ trunk/libs/geometry/extensions/test/nsphere/within.cpp	2013-08-17 07:14:14 EDT (Sat, 17 Aug 2013)	(r85371)
@@ -36,17 +36,20 @@
         << " detected: " << detected);
 }
 
-
-
-
 template <typename P>
 void test_circles()
 {
     test_circle<P>("POINT(2 1)", true);
     test_circle<P>("POINT(12 1)", false);
 
-    //test_circle<bg::model::linestring<P> >("LINESTRING(1 1,2 1,2 2)", true);
-    //test_circle<bg::model::linestring<P> >("LINESTRING(1 1,2 1,2 2,10 10)", false);
+    test_circle<bg::model::linestring<P> >("LINESTRING(1 1,2 1,2 2)", true);
+    test_circle<bg::model::linestring<P> >("LINESTRING(1 1,2 1,2 2,10 10)", false);
+
+    test_circle<bg::model::polygon<P> >("POLYGON((1 1,2 1,2 2,1 1))", true);
+    test_circle<bg::model::polygon<P> >("POLYGON((1 1,2 1,2 2,10 10,1 1))", false);
+
+    test_circle<bg::model::box<P> >("BOX(1 1,2 2)", true);
+    test_circle<bg::model::box<P> >("BOX(1 1,10 10)", false);
 }