// Boost.Geometry (aka GGL, Generic Geometry Library) // Unit Test // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. // This file was modified by Oracle on 2015. // Modifications copyright (c) 2015, Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_TEST_CENTROID_HPP #define BOOST_GEOMETRY_TEST_CENTROID_HPP // Test-functionality, shared between single and multi tests #include #include #include #include #include #include #include template struct check_result { template static void apply(Point1 const& actual, Point2 const& expected) { check_result::apply(actual, expected); BOOST_CHECK_CLOSE(bg::get(actual), bg::get(expected), 0.001); } }; template <> struct check_result<0> { template static void apply(Point1 const&, Point2 const&) {} }; template void test_with_other_calculation_type(Geometry const& geometry, Point& c1) { typedef typename bg::point_type::type point_type; // Calculate it with user defined strategy Point c2; bg::centroid(geometry, c2, bg::strategy::centroid::bashein_detmer()); std::cout << typeid(CalculationType).name() << ": " << std::setprecision(20) << bg::get<0>(c2) << " " << bg::get<1>(c2) << " -> difference: " << bg::distance(c1, c2) << std::endl; } template void test_centroid(Geometry const& geometry, T const& d1, T const& d2, T const& d3 = T(), T const& d4 = T(), T const& d5 = T()) { Point c1; bg::centroid(geometry, c1); check_result::type::value>::apply(c1, boost::make_tuple(d1, d2, d3, d4, d5)); boost::variant v(geometry); bg::centroid(v, c1); #ifdef REPORT_RESULTS std::cout << "normal: " << std::setprecision(20) << bg::get<0>(c1) << " " << bg::get<1>(c1) << std::endl; //test_with_other_calculation_type(geometry, c1); test_with_other_calculation_type(geometry, c1); test_with_other_calculation_type(geometry, c1); #if defined(HAVE_TTMATH) test_with_other_calculation_type(geometry, c1); #endif #endif } template void test_centroid(std::string const& wkt, T const& d1, T const& d2, T const& d3 = T(), T const& d4 = T(), T const& d5 = T()) { Geometry geometry; bg::read_wkt(wkt, geometry); test_centroid(geometry, d1, d2, d3, d4, d5); } template void test_centroid(Geometry const& geometry, T const& d1, T const& d2, T const& d3 = T(), T const& d4 = T(), T const& d5 = T()) { test_centroid::type>(geometry, d1, d2, d3, d4, d5); } template void test_centroid(std::string const& wkt, T const& d1, T const& d2, T const& d3 = T(), T const& d4 = T(), T const& d5 = T()) { test_centroid::type>(wkt, d1, d2, d3, d4, d5); } template void test_centroid_exception() { Geometry geometry; try { typename bg::point_type::type c; bg::centroid(geometry, c); } catch(bg::centroid_exception const& ) { return; } BOOST_CHECK_MESSAGE(false, "A centroid_exception should have been thrown" ); } template void test_centroid_exception(std::string const& wkt) { Geometry geometry; bg::read_wkt(wkt, geometry); try { typename bg::point_type::type c; bg::centroid(geometry, c); } catch(bg::centroid_exception const& ) { return; } BOOST_CHECK_MESSAGE(false, "A centroid_exception should have been thrown" ); } #endif