From eb49a19b98f48de51e5f1addb395bb3ac6905110 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Tue, 14 Aug 2007 09:53:55 +0000 Subject: [PATCH] Test the hash library with warning level 4 on Visual C++ - although there's still one warning for hashing long doubles. [SVN r38647] --- hash/test/Jamfile.v2 | 1 + hash/test/hash_complex_test.cpp | 13 ++++++++++++- hash/test/hash_float_test.cpp | 8 ++++++++ hash/test/hash_map_test.hpp | 9 +++++++++ hash/test/hash_number_test.cpp | 26 +++++++++++++++++++++++--- hash/test/hash_sequence_test.hpp | 9 +++++++++ hash/test/hash_set_test.hpp | 16 +++++++++++++++- 7 files changed, 77 insertions(+), 5 deletions(-) diff --git a/hash/test/Jamfile.v2 b/hash/test/Jamfile.v2 index f77271a..8d0649b 100644 --- a/hash/test/Jamfile.v2 +++ b/hash/test/Jamfile.v2 @@ -9,6 +9,7 @@ project hash-tests : requirements gcc:_GLIBCXX_DEBUG gcc:-Wsign-promo + msvc:/W4 ; test-suite functional/hash diff --git a/hash/test/hash_complex_test.cpp b/hash/test/hash_complex_test.cpp index 7e1753b..a0707b5 100644 --- a/hash/test/hash_complex_test.cpp +++ b/hash/test/hash_complex_test.cpp @@ -19,11 +19,22 @@ #include #include +#include + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4244) // conversion from 'unsigned long' to 'unsigned short', possible loss of data +#pragma warning(disable:4512) // assignment operator could not be generated +#endif + #include #include #include #include -#include + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif template void generic_complex_tests(std::complex v) diff --git a/hash/test/hash_float_test.cpp b/hash/test/hash_float_test.cpp index 1ee901f..c87934d 100644 --- a/hash/test/hash_float_test.cpp +++ b/hash/test/hash_float_test.cpp @@ -18,6 +18,11 @@ #include +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4127) // conditional expression is constant +#endif + template void float_tests(char const* name, T* = 0) { @@ -226,3 +231,6 @@ int main() return boost::report_errors(); } +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif diff --git a/hash/test/hash_map_test.hpp b/hash/test/hash_map_test.hpp index 77cae73..1a56282 100644 --- a/hash/test/hash_map_test.hpp +++ b/hash/test/hash_map_test.hpp @@ -9,6 +9,11 @@ #include +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4245) // signed/unsigned mismatch +#endif + namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) { template @@ -60,5 +65,9 @@ namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) } } +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + #undef CONTAINER_TYPE #endif diff --git a/hash/test/hash_number_test.cpp b/hash/test/hash_number_test.cpp index 2e2f9ad..6d8e5ac 100644 --- a/hash/test/hash_number_test.cpp +++ b/hash/test/hash_number_test.cpp @@ -21,6 +21,13 @@ #include "./compile_time.hpp" +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4127) // conditional expression is constant +#pragma warning(disable:4309) // truncation of constant value +#pragma warning(disable:4310) // cast truncates constant value +#endif + template void numeric_test(T*) { @@ -31,7 +38,7 @@ void numeric_test(T*) HASH_NAMESPACE::hash x1; HASH_NAMESPACE::hash x2; - T v1 = -5; + T v1 = (T) -5; BOOST_TEST(x1(v1) == x2(v1)); BOOST_TEST(x1(T(-5)) == x2(T(-5))); BOOST_TEST(x1(T(0)) == x2(T(0))); @@ -106,6 +113,16 @@ void poor_quality_tests(T*) BOOST_TEST(x1((limits::max)()) != x2((limits::max)() - 1)); } +void bool_test() +{ + HASH_NAMESPACE::hash x1; + HASH_NAMESPACE::hash x2; + + BOOST_TEST(x1(true) == x2(true)); + BOOST_TEST(x1(false) == x2(false)); + BOOST_TEST(x1(true) != x2(false)); + BOOST_TEST(x1(false) != x2(true)); +} #define NUMERIC_TEST(type, name) \ std::cerr<<"Testing: " BOOST_STRINGIZE(name) "\n"; \ @@ -119,7 +136,6 @@ void poor_quality_tests(T*) int main() { - NUMERIC_TEST(bool, bool) NUMERIC_TEST(char, char) NUMERIC_TEST(signed char, schar) NUMERIC_TEST(unsigned char, uchar) @@ -142,7 +158,11 @@ int main() NUMERIC_TEST(double, double) NUMERIC_TEST(long double, ldouble) + bool_test(); + return boost::report_errors(); } - +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif diff --git a/hash/test/hash_sequence_test.hpp b/hash/test/hash_sequence_test.hpp index ac96249..eb3295c 100644 --- a/hash/test/hash_sequence_test.hpp +++ b/hash/test/hash_sequence_test.hpp @@ -9,6 +9,11 @@ #include +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4245) // signed/unsigned mismatch +#endif + namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) { template @@ -63,5 +68,9 @@ namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) } } +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + #undef CONTAINER_TYPE #endif diff --git a/hash/test/hash_set_test.hpp b/hash/test/hash_set_test.hpp index 5ec25ce..50791a6 100644 --- a/hash/test/hash_set_test.hpp +++ b/hash/test/hash_set_test.hpp @@ -9,12 +9,17 @@ #include +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4245) // signed/unsigned mismatch +#endif + namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) { template void integer_tests(T* = 0) { - const int number_of_containers = 11; + const int number_of_containers = 12; T containers[number_of_containers]; for(int i = 0; i < 5; ++i) { @@ -30,6 +35,11 @@ namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) containers[9].insert(-1); containers[10].insert(-1); containers[10].insert(1); + containers[11].insert(1); + containers[11].insert(2); + containers[11].insert(3); + containers[11].insert(4); + containers[11].insert(5); HASH_NAMESPACE::hash hasher; @@ -61,5 +71,9 @@ namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests) } } +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + #undef CONTAINER_TYPE #endif