diff --git a/test/lexical_cast_integral_types_test.cpp b/test/lexical_cast_integral_types_test.cpp index 96fc20e..c69e741 100644 --- a/test/lexical_cast_integral_types_test.cpp +++ b/test/lexical_cast_integral_types_test.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -568,19 +569,44 @@ void test_conversion_from_to_uint128() } #endif +template +void test_integral_conversions_on_min_max_impl() +{ + typedef SignedT signed_t; + typedef BOOST_DEDUCED_TYPENAME boost::make_unsigned::type unsigned_t; + + typedef std::numeric_limits s_limits; + typedef std::numeric_limits uns_limits; + + BOOST_CHECK_EQUAL(lexical_cast((uns_limits::max)()), (uns_limits::max)()); + BOOST_CHECK_EQUAL(lexical_cast((uns_limits::min)()), (uns_limits::min)()); + + BOOST_CHECK_EQUAL(lexical_cast((s_limits::max)()), (s_limits::max)()); + BOOST_CHECK_EQUAL(lexical_cast((uns_limits::min)()), static_cast((uns_limits::min)())); + + BOOST_CHECK_EQUAL(lexical_cast((s_limits::max)()), static_cast((s_limits::max)())); + BOOST_CHECK_EQUAL(lexical_cast((s_limits::min)()), static_cast((s_limits::min)())); +} + void test_integral_conversions_on_min_max() { - typedef std::numeric_limits int_limits; - typedef std::numeric_limits uint_limits; + test_integral_conversions_on_min_max_impl(); + test_integral_conversions_on_min_max_impl(); - BOOST_CHECK_EQUAL(lexical_cast((uint_limits::max)()), (uint_limits::max)()); - BOOST_CHECK_EQUAL(lexical_cast((uint_limits::min)()), (uint_limits::min)()); +#ifdef _MSC_VER + test_integral_conversions_on_min_max_impl(); - BOOST_CHECK_EQUAL(lexical_cast((int_limits::max)()), (int_limits::max)()); - BOOST_CHECK_EQUAL(lexical_cast((uint_limits::min)()), static_cast((uint_limits::min)())); +#if defined(BOOST_HAS_LONG_LONG) + test_integral_conversions_on_min_max_impl(); +#elif defined(BOOST_HAS_MS_INT64) + test_integral_conversions_on_min_max_impl<__int64>(); +#endif + +#ifdef BOOST_LCAST_HAS_INT128 + test_integral_conversions_on_min_max_impl(); +#endif +#endif - BOOST_CHECK_EQUAL(lexical_cast((int_limits::max)()), static_cast((int_limits::max)())); - BOOST_CHECK_EQUAL(lexical_cast((int_limits::min)()), static_cast((int_limits::min)())); }