#include #include #include #include #include using namespace boost; // See also test_conversion_from_string_to_integral(CharT) // in libs/conversion/lexical_cast_test.cpp template void test_too_long_number(CharT zero) { typedef std::numeric_limits limits; std::basic_string s; std::basic_ostringstream o; o << (limits::max)() << zero; s = o.str(); BOOST_CHECK_THROW(lexical_cast(s), bad_lexical_cast); s[s.size()-1] += 9; // '0' -> '9' BOOST_CHECK_THROW(lexical_cast(s), bad_lexical_cast); if(limits::is_signed) { std::basic_ostringstream o; o << (limits::min)() << zero; s = o.str(); BOOST_CHECK_THROW(lexical_cast(s), bad_lexical_cast); s[s.size()-1] += 9; // '0' -> '9' BOOST_CHECK_THROW(lexical_cast(s), bad_lexical_cast); } } void test_vc8_bug() { test_too_long_number('0'); test_too_long_number('0'); #if !defined(BOOST_LCAST_NO_WCHAR_T) test_too_long_number(L'0'); test_too_long_number(L'0'); #endif } unit_test::test_suite *init_unit_test_suite(int, char *[]) { unit_test_framework::test_suite *suite = BOOST_TEST_SUITE("lexical_cast vc8 bug unit test"); suite->add(BOOST_TEST_CASE(test_vc8_bug)); return suite; }