// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // 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 GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP #define GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP #if defined(_MSC_VER) // We deliberately mix float/double's so turn off warnings #pragma warning( disable : 4244 ) // For (new since Boost 1.40) warning in Boost.Test on putenv/posix #pragma warning( disable : 4996 ) //#pragma warning( disable : 4305 ) #endif // defined(_MSC_VER) #include #if defined(BOOST_INTEL_CXX_VERSION) #define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE #endif #include // Include some always-included-for-testing files #if ! defined(BOOST_GEOMETRY_NO_BOOST_TEST) // Until Boost.Test fixes it, silence warning issued by clang: // warning: unused variable 'check_is_close' [-Wunused-variable] #ifdef __clang__ # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wunused-variable" #endif # include # include //# include # include #ifdef __clang__ # pragma clang diagnostic pop #endif #endif #if defined(HAVE_TTMATH) # include #endif #if defined(HAVE_CLN) || defined(HAVE_GMP) # include #endif #if defined(HAVE_GMP) # include #endif #if defined(HAVE_CLN) # include #endif // For all tests: // - do NOT use "using namespace boost::geometry" to make clear what is Boost.Geometry // - use bg:: as short alias #include #include #include #include namespace bg = boost::geometry; template struct string_from_type {}; template <> struct string_from_type { static std::string name() { return "v"; } }; template <> struct string_from_type { static std::string name() { return "f"; } }; template <> struct string_from_type { static std::string name() { return "d"; } }; template <> struct string_from_type { static std::string name() { return "e"; } }; template <> struct string_from_type { static std::string name() { return "s"; } }; template <> struct string_from_type { static std::string name() { return "i"; } }; template <> struct string_from_type { static std::string name() { return "l"; } }; #if defined(HAVE_TTMATH) template <> struct string_from_type { static std::string name() { return "t"; } }; #endif #if defined(BOOST_RATIONAL_HPP) template struct string_from_type > { static std::string name() { return "r"; } }; #endif #if defined(HAVE_GMP) template <> struct string_from_type { static std::string name() { return "g"; } }; #endif #if defined(HAVE_CLN) template <> struct string_from_type { static std::string name() { return "c"; } }; #endif template inline T1 if_typed_tt(T1 value_tt, T2 value) { #if defined(HAVE_TTMATH) return boost::is_same::type::value ? value_tt : value; #else boost::ignore_unused_variable_warning(value_tt); return value; #endif } template inline T if_typed(T value_typed, T value) { return boost::is_same::value ? value_typed : value; } template inline std::string type_for_assert_message() { bool const ccw = bg::point_order::value == bg::counterclockwise || bg::point_order::value == bg::counterclockwise; bool const open = bg::closure::value == bg::open || bg::closure::value == bg::open; std::ostringstream out; out << string_from_type::type>::name() << (ccw ? " ccw" : "") << (open ? " open" : ""); return out.str(); } struct geographic_policy { template static inline CoordinateType apply(CoordinateType const& value) { return value; } }; struct mathematical_policy { template static inline CoordinateType apply(CoordinateType const& value) { return 90 - value; } }; #endif // GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP