diff options
Diffstat (limited to 'src/boost/libs/geometry/test/geometry_test_common.hpp')
-rw-r--r-- | src/boost/libs/geometry/test/geometry_test_common.hpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/src/boost/libs/geometry/test/geometry_test_common.hpp b/src/boost/libs/geometry/test/geometry_test_common.hpp new file mode 100644 index 00000000..87ec3d97 --- /dev/null +++ b/src/boost/libs/geometry/test/geometry_test_common.hpp @@ -0,0 +1,202 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2015 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2015 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 + +#include <boost/config.hpp> + +// Determine debug/release mode +// (it would be convenient if Boost.Config or Boost.Test would define this) +// Note that they might be combined (e.g. for optimize+no inline) +#if defined (BOOST_CLANG) || defined(BOOST_GCC) +#if defined(__OPTIMIZE__) + #define BOOST_GEOMETRY_COMPILER_MODE_RELEASE +#endif +#if defined(__NO_INLINE__) +#define BOOST_GEOMETRY_COMPILER_MODE_DEBUG +#endif +#endif + +#if defined(BOOST_MSVC) +#if defined(_DEBUG) +#define BOOST_GEOMETRY_COMPILER_MODE_DEBUG +#else +#define BOOST_GEOMETRY_COMPILER_MODE_RELEASE +#endif +#endif + + +#if defined(BOOST_MSVC) +// 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(BOOST_MSVC) + +#include <boost/config.hpp> +#include <boost/concept_check.hpp> +#include <boost/core/ignore_unused.hpp> +#include <boost/foreach.hpp> + +#include <string_from_type.hpp> + +// Include some always-included-for-testing files +#if ! defined(BOOST_GEOMETRY_NO_BOOST_TEST) + +// Until Boost.Test fixes it, silence warning issued by clang: +#ifdef __clang__ +# pragma clang diagnostic push +// warning: unused variable 'check_is_close' [-Wunused-variable] +# pragma clang diagnostic ignored "-Wunused-variable" +// warnings when -Wconversion is set +# pragma clang diagnostic ignored "-Wsign-conversion" +# pragma clang diagnostic ignored "-Wshorten-64-to-32" +#endif + +# include <boost/test/tools/floating_point_comparison.hpp> +#ifndef BOOST_TEST_MODULE +# include <boost/test/included/test_exec_monitor.hpp> +//# include <boost/test/included/prg_exec_monitor.hpp> +# include <boost/test/impl/execution_monitor.ipp> +#endif + +#ifdef __clang__ +# pragma clang diagnostic pop +#endif + +#endif + + +#if defined(HAVE_TTMATH) +# include <boost/geometry/extensions/contrib/ttmath_stub.hpp> +#endif + +#if defined(HAVE_CLN) || defined(HAVE_GMP) +# include <boost/numeric_adaptor/numeric_adaptor.hpp> +#endif + + +#if defined(HAVE_GMP) +# include <boost/numeric_adaptor/gmp_value_type.hpp> +#endif +#if defined(HAVE_CLN) +# include <boost/numeric_adaptor/cln_value_type.hpp> +#endif + +// For all tests: +// - do NOT use "using namespace boost::geometry" to make clear what is Boost.Geometry +// - use bg:: as short alias +#include <boost/geometry/core/coordinate_type.hpp> +#include <boost/geometry/core/config.hpp> +#include <boost/geometry/core/closure.hpp> +#include <boost/geometry/core/point_order.hpp> +#include <boost/geometry/core/tag.hpp> +namespace bg = boost::geometry; + + +template <typename CoordinateType, typename T1, typename T2> +inline T1 if_typed_tt(T1 value_tt, T2 value) +{ +#if defined(HAVE_TTMATH) + return boost::is_same<CoordinateType, ttmath_big>::type::value ? value_tt : value; +#else + boost::ignore_unused(value_tt); + return value; +#endif +} + +template <typename CoordinateType, typename Specified, typename T> +inline T if_typed(T value_typed, T value) +{ + return boost::is_same<CoordinateType, Specified>::value ? value_typed : value; +} + +template <typename Geometry1, typename Geometry2> +inline std::string type_for_assert_message() +{ + bool const ccw = + bg::point_order<Geometry1>::value == bg::counterclockwise + || bg::point_order<Geometry2>::value == bg::counterclockwise; + bool const open = + bg::closure<Geometry1>::value == bg::open + || bg::closure<Geometry2>::value == bg::open; + + std::ostringstream out; + out << string_from_type<typename bg::coordinate_type<Geometry1>::type>::name() + << (ccw ? " ccw" : "") + << (open ? " open" : ""); + return out.str(); +} + +struct geographic_policy +{ + template <typename CoordinateType> + static inline CoordinateType apply(CoordinateType const& value) + { + return value; + } +}; + +struct mathematical_policy +{ + template <typename CoordinateType> + static inline CoordinateType apply(CoordinateType const& value) + { + return 90 - value; + } + +}; + +typedef double default_test_type; + +#if defined(BOOST_GEOMETRY_USE_RESCALING) +#define BG_IF_RESCALED(a, b) a +#else +#define BG_IF_RESCALED(a, b) b +#endif + +#if defined(BOOST_GEOMETRY_USE_KRAMER_RULE) +#define BG_IF_KRAMER(a, b) a +#else +#define BG_IF_KRAMER(a, b) b +#endif + +inline void BoostGeometryWriteTestConfiguration() +{ + std::cout << std::endl << "Test configuration:" << std::endl; +#if defined(BOOST_GEOMETRY_USE_RESCALING) + std::cout << " - Using rescaling" << std::endl; +#endif +#if defined(BOOST_GEOMETRY_USE_KRAMER_RULE) + std::cout << " - Using Kramer rule" << std::endl; +#else + std::cout << " - Using general form" << std::endl; +#endif +#if defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE) + std::cout << " - Testing only one type" << std::endl; +#endif +#if defined(BOOST_GEOMETRY_TEST_ONLY_ONE_ORDER) + std::cout << " - Testing only one order" << std::endl; +#endif +#if defined(BOOST_GEOMETRY_TEST_FAILURES) + std::cout << " - Including failing test cases" << std::endl; +#endif + std::cout << " - Default test type: " << string_from_type<default_test_type>::name() << std::endl; + std::cout << std::endl; +} + +#endif // GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP |