]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/lexical_cast/test/lexical_cast_vc8_bug_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / lexical_cast / test / lexical_cast_vc8_bug_test.cpp
CommitLineData
7c673cae
FG
1// Unit test for boost::lexical_cast.
2//
3// See http://www.boost.org for most recent version, including documentation.
4//
5// Copyright Alexander Nasonov, 2007.
6//
7// Distributed under the Boost
8// Software License, Version 1.0. (See accompanying file
9// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).
10//
11// This tests now must pass on vc8, because lexical_cast
12// implementation has changed and it does not use stringstream for casts
13// to integral types
14
15#include <boost/config.hpp>
16#include <boost/lexical_cast.hpp>
17#include <boost/cstdint.hpp>
18#include <boost/test/unit_test.hpp>
19
20#include <string>
21
22using namespace boost;
23
24// See also test_conversion_from_string_to_integral(CharT)
25// in libs/conversion/lexical_cast_test.cpp
26template<class T, class CharT>
27void test_too_long_number(CharT zero)
28{
29 typedef std::numeric_limits<T> limits;
30
31 std::basic_string<CharT> s;
32
33 std::basic_ostringstream<CharT> o;
34 o << (limits::max)() << zero;
35 s = o.str();
36 BOOST_CHECK_THROW(lexical_cast<T>(s), bad_lexical_cast);
37 s[s.size()-1] += static_cast<CharT>(9); // '0' -> '9'
38 BOOST_CHECK_THROW(lexical_cast<T>(s), bad_lexical_cast);
39
40 if(limits::is_signed)
41 {
42 std::basic_ostringstream<CharT> o;
43 o << (limits::min)() << zero;
44 s = o.str();
45 BOOST_CHECK_THROW(lexical_cast<T>(s), bad_lexical_cast);
46 s[s.size()-1] += static_cast<CharT>(9); // '0' -> '9'
47 BOOST_CHECK_THROW(lexical_cast<T>(s), bad_lexical_cast);
48 }
49}
50
51void test_vc8_bug()
52{
53 test_too_long_number<boost::intmax_t>('0');
54 test_too_long_number<boost::uintmax_t>('0');
55#if !defined(BOOST_LCAST_NO_WCHAR_T)
56 test_too_long_number<boost::intmax_t>(L'0');
57 test_too_long_number<boost::uintmax_t>(L'0');
58#endif
59}
60
61unit_test::test_suite *init_unit_test_suite(int, char *[])
62{
63 unit_test::test_suite *suite =
64 BOOST_TEST_SUITE("lexical_cast vc8 bug unit test");
65 suite->add(BOOST_TEST_CASE(test_vc8_bug));
66 return suite;
67}