diff --git a/hash/test/hash_complex_test.cpp b/hash/test/hash_complex_test.cpp index bb1592c..36d2673 100644 --- a/hash/test/hash_complex_test.cpp +++ b/hash/test/hash_complex_test.cpp @@ -35,7 +35,7 @@ int main() {} #endif #endif -#if defined(__GNUC__) +#if defined(__GNUC__) && !defined(BOOST_INTEL_CXX_VERSION) #pragma GCC diagnostic ignored "-Wfloat-equal" #endif diff --git a/hash/test/hash_float_test.hpp b/hash/test/hash_float_test.hpp index c608915..a61d9de 100644 --- a/hash/test/hash_float_test.hpp +++ b/hash/test/hash_float_test.hpp @@ -30,7 +30,7 @@ #endif #endif -#if defined(__GNUC__) +#if defined(__GNUC__) && !defined(BOOST_INTEL_CXX_VERSION) #pragma GCC diagnostic ignored "-Wfloat-equal" #endif diff --git a/hash/test/hash_number_test.cpp b/hash/test/hash_number_test.cpp index 2645dfa..b7083c9 100644 --- a/hash/test/hash_number_test.cpp +++ b/hash/test/hash_number_test.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "./compile_time.hpp" @@ -26,10 +27,34 @@ #pragma warning(disable:4310) // cast truncates constant value #endif -#if defined(__GNUC__) +#if defined(__GNUC__) && !defined(BOOST_INTEL_CXX_VERSION) #pragma GCC diagnostic ignored "-Wfloat-equal" #endif +template +void numeric_extra_tests(typename + boost::enable_if_c::is_integer, + void*>::type = 0) +{ + typedef boost::hash_detail::limits limits; + + if(limits::is_signed || + limits::digits <= boost::hash_detail::limits::digits) + { + BOOST_TEST(HASH_NAMESPACE::hash_value(T(-5)) == (std::size_t)T(-5)); + } + BOOST_TEST(HASH_NAMESPACE::hash_value(T(0)) == (std::size_t)T(0u)); + BOOST_TEST(HASH_NAMESPACE::hash_value(T(10)) == (std::size_t)T(10u)); + BOOST_TEST(HASH_NAMESPACE::hash_value(T(25)) == (std::size_t)T(25u)); +} + +template +void numeric_extra_tests(typename + boost::disable_if_c::is_integer, + void*>::type = 0) +{ +} + template void numeric_test(T*) { @@ -55,17 +80,7 @@ void numeric_test(T*) BOOST_TEST(x1(T(10)) == HASH_NAMESPACE::hash_value(T(10))); BOOST_TEST(x1(T(25)) == HASH_NAMESPACE::hash_value(T(25))); - if (limits::is_integer) - { - if(limits::is_signed || - limits::digits <= boost::hash_detail::limits::digits) - { - BOOST_TEST(HASH_NAMESPACE::hash_value(T(-5)) == (std::size_t)T(-5)); - } - BOOST_TEST(HASH_NAMESPACE::hash_value(T(0)) == (std::size_t)T(0u)); - BOOST_TEST(HASH_NAMESPACE::hash_value(T(10)) == (std::size_t)T(10u)); - BOOST_TEST(HASH_NAMESPACE::hash_value(T(25)) == (std::size_t)T(25u)); - } + numeric_extra_tests(); #endif }