// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+// Copyright (c) 2021 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
#include "test_distance.hpp"
#include <boost/array.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/typeof/typeof.hpp>
#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
BOOST_CONCEPT_ASSERT( (bg::concepts::PointDistanceStrategy<taxicab_distance, P, P>) );
typedef typename services::return_type<taxicab_distance, P, P>::type cab_return_type;
- BOOST_MPL_ASSERT((boost::is_same<cab_return_type, typename bg::coordinate_type<P>::type>));
+ BOOST_GEOMETRY_STATIC_ASSERT(
+ (std::is_same<cab_return_type, typename bg::coordinate_type<P>::type>::value),
+ "Unexpected result type",
+ cab_return_type, typename bg::coordinate_type<P>::type);
taxicab_distance tcd;
cab_return_type d = bg::distance(p1, p2, tcd);
bg::read_wkt(a, da);
bg::read_wkt(b, db);
- BOOST_AUTO(idist, bg::distance(ia, ib));
- BOOST_AUTO(ddist, bg::distance(da, db));
+ auto const idist = bg::distance(ia, ib);
+ auto const ddist = bg::distance(da, db);
BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
"within<a double> different from within<an int>");
bg::read_wkt(a, da);
bg::read_wkt(b, db);
- BOOST_AUTO(idist, bg::distance(ia, ib));
- BOOST_AUTO(ddist, bg::distance(da, db));
+ auto const idist = bg::distance(ia, ib);
+ auto const ddist = bg::distance(da, db);
BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
"within<a double> different from within<an int>");
variant_type v1, v2;
- BOOST_MPL_ASSERT((
- boost::is_same
- <
- typename bg::distance_result
- <
- variant_type, variant_type, bg::default_strategy
- >::type,
- double
- >
- ));
+ using distance_t = typename bg::distance_result
+ <
+ variant_type, variant_type, bg::default_strategy
+ >::type;
+ BOOST_GEOMETRY_STATIC_ASSERT(
+ (std::is_same<distance_t, double>::value),
+ "Unexpected result type",
+ distance_t, double);
// Default strategy
v1 = point;
//BOOST_CHECK_CLOSE(bg::distance(point, v2, s), bg::distance(point, point, s), 0.0001);
}
+template <typename T>
+void test_geometry_collection()
+{
+ using point_type = bg::model::point<T, 2, bg::cs::cartesian>;
+ using segment_type = bg::model::segment<point_type>;
+ using box_type = bg::model::box<point_type>;
+ using variant_type = boost::variant<point_type, segment_type, box_type>;
+ using gc_type = bg::model::geometry_collection<variant_type>;
+
+ point_type p1 {1, 3}, p2 {2, 3};
+ segment_type s1 {{2, 2}, {4, 4}}, s2 {{3, 2}, {5, 4}};
+ gc_type gc1 {p1, s1}, gc2 {p2, s2};
+
+ BOOST_CHECK_CLOSE(bg::distance(p1, gc2), bg::distance(p1, p2), 0.0001);
+ BOOST_CHECK_CLOSE(bg::distance(gc1, s2), bg::distance(s1, s2), 0.0001);
+ BOOST_CHECK_CLOSE(bg::distance(gc1, gc2), bg::distance(s1, s2), 0.0001);
+}
+
int test_main(int, char* [])
{
#ifdef TEST_ARRAY
test_variant<double>();
test_variant<int>();
+ test_geometry_collection<double>();
+
return 0;
}