| 1 | //  Unit test for boost::lexical_cast. | 
|---|
| 2 | // | 
|---|
| 3 | //  See http://www.boost.org for most recent version, including documentation. | 
|---|
| 4 | // | 
|---|
| 5 | //  Copyright Terje Slettebø and Kevlin Henney, 2005. | 
|---|
| 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 | // Note: The unit test no longer compile on MSVC 6, but lexical_cast itself works for it. | 
|---|
| 12 |  | 
|---|
| 13 | #include <boost/config.hpp> | 
|---|
| 14 |  | 
|---|
| 15 | #if defined(__INTEL_COMPILER) | 
|---|
| 16 | #pragma warning(disable: 193 383 488 981 1418 1419) | 
|---|
| 17 | #elif defined(BOOST_MSVC) | 
|---|
| 18 | #pragma warning(disable: 4097 4100 4121 4127 4146 4244 4245 4511 4512 4701 4800) | 
|---|
| 19 | #endif | 
|---|
| 20 |  | 
|---|
| 21 | #include <boost/lexical_cast.hpp> | 
|---|
| 22 |  | 
|---|
| 23 | #include <boost/test/unit_test.hpp> | 
|---|
| 24 | #include <boost/test/floating_point_comparison.hpp> | 
|---|
| 25 |  | 
|---|
| 26 | #if defined(BOOST_NO_STRINGSTREAM) || \ | 
|---|
| 27 |     defined(BOOST_NO_STD_WSTRING) || \ | 
|---|
| 28 |     defined(BOOST_NO_STD_LOCALE) | 
|---|
| 29 | #define DISABLE_WIDE_CHAR_SUPPORT | 
|---|
| 30 | #endif | 
|---|
| 31 |  | 
|---|
| 32 | using namespace boost; | 
|---|
| 33 |  | 
|---|
| 34 | void test_conversion_to_char(); | 
|---|
| 35 | void test_conversion_to_int(); | 
|---|
| 36 | void test_conversion_to_double(); | 
|---|
| 37 | void test_conversion_to_bool(); | 
|---|
| 38 | void test_conversion_to_string(); | 
|---|
| 39 | void test_conversion_from_to_wchar_t_alias(); | 
|---|
| 40 | void test_conversion_to_pointer(); | 
|---|
| 41 | void test_conversion_from_wchar_t(); | 
|---|
| 42 | void test_conversion_to_wchar_t(); | 
|---|
| 43 | void test_conversion_from_wstring(); | 
|---|
| 44 | void test_conversion_to_wstring(); | 
|---|
| 45 | void test_bad_lexical_cast(); | 
|---|
| 46 | void test_no_whitespace_stripping(); | 
|---|
| 47 |  | 
|---|
| 48 | unit_test::test_suite *init_unit_test_suite(int, char *[]) | 
|---|
| 49 | { | 
|---|
| 50 |     unit_test_framework::test_suite *suite = | 
|---|
| 51 |         BOOST_TEST_SUITE("lexical_cast unit test"); | 
|---|
| 52 |     suite->add(BOOST_TEST_CASE(test_conversion_to_char)); | 
|---|
| 53 |     suite->add(BOOST_TEST_CASE(test_conversion_to_int)); | 
|---|
| 54 |     suite->add(BOOST_TEST_CASE(test_conversion_to_double)); | 
|---|
| 55 |     suite->add(BOOST_TEST_CASE(test_conversion_to_bool)); | 
|---|
| 56 |     suite->add(BOOST_TEST_CASE(test_conversion_from_to_wchar_t_alias)); | 
|---|
| 57 |     suite->add(BOOST_TEST_CASE(test_conversion_to_pointer)); | 
|---|
| 58 |     suite->add(BOOST_TEST_CASE(test_conversion_to_string)); | 
|---|
| 59 |     #ifndef DISABLE_WIDE_CHAR_SUPPORT | 
|---|
| 60 |     suite->add(BOOST_TEST_CASE(test_conversion_from_wchar_t)); | 
|---|
| 61 |     suite->add(BOOST_TEST_CASE(test_conversion_to_wchar_t)); | 
|---|
| 62 |     suite->add(BOOST_TEST_CASE(test_conversion_from_wstring)); | 
|---|
| 63 |     suite->add(BOOST_TEST_CASE(test_conversion_to_wstring)); | 
|---|
| 64 |     #endif | 
|---|
| 65 |     suite->add(BOOST_TEST_CASE(test_bad_lexical_cast)); | 
|---|
| 66 |     suite->add(BOOST_TEST_CASE(test_no_whitespace_stripping)); | 
|---|
| 67 |     return suite; | 
|---|
| 68 | } | 
|---|
| 69 |  | 
|---|
| 70 | void test_conversion_to_char() | 
|---|
| 71 | { | 
|---|
| 72 |     BOOST_CHECK_EQUAL('A', lexical_cast<char>('A')); | 
|---|
| 73 |     BOOST_CHECK_EQUAL(' ', lexical_cast<char>(' ')); | 
|---|
| 74 |     BOOST_CHECK_EQUAL('1', lexical_cast<char>(1)); | 
|---|
| 75 |     BOOST_CHECK_EQUAL('0', lexical_cast<char>(0)); | 
|---|
| 76 |     BOOST_CHECK_THROW(lexical_cast<char>(123), bad_lexical_cast); | 
|---|
| 77 |     BOOST_CHECK_EQUAL('1', lexical_cast<char>(1.0)); | 
|---|
| 78 |     BOOST_CHECK_EQUAL('1', lexical_cast<char>(true)); | 
|---|
| 79 |     BOOST_CHECK_EQUAL('0', lexical_cast<char>(false)); | 
|---|
| 80 |     BOOST_CHECK_EQUAL('A', lexical_cast<char>("A")); | 
|---|
| 81 |     BOOST_CHECK_EQUAL(' ', lexical_cast<char>(" ")); | 
|---|
| 82 |     BOOST_CHECK_THROW(lexical_cast<char>(""), bad_lexical_cast); | 
|---|
| 83 |     BOOST_CHECK_THROW(lexical_cast<char>("Test"), bad_lexical_cast); | 
|---|
| 84 |     BOOST_CHECK_EQUAL('A', lexical_cast<char>(std::string("A"))); | 
|---|
| 85 |     BOOST_CHECK_EQUAL(' ', lexical_cast<char>(std::string(" "))); | 
|---|
| 86 |     BOOST_CHECK_THROW( | 
|---|
| 87 |         lexical_cast<char>(std::string("")), bad_lexical_cast); | 
|---|
| 88 |     BOOST_CHECK_THROW( | 
|---|
| 89 |         lexical_cast<char>(std::string("Test")), bad_lexical_cast); | 
|---|
| 90 | } | 
|---|
| 91 |  | 
|---|
| 92 | void test_conversion_to_int() | 
|---|
| 93 | { | 
|---|
| 94 |     BOOST_CHECK_EQUAL(1, lexical_cast<int>('1')); | 
|---|
| 95 |     BOOST_CHECK_EQUAL(0, lexical_cast<int>('0')); | 
|---|
| 96 |     BOOST_CHECK_THROW(lexical_cast<int>('A'), bad_lexical_cast); | 
|---|
| 97 |     BOOST_CHECK_EQUAL(1, lexical_cast<int>(1)); | 
|---|
| 98 |     BOOST_CHECK_EQUAL( | 
|---|
| 99 |         (std::numeric_limits<int>::max)(), | 
|---|
| 100 |         lexical_cast<int>((std::numeric_limits<int>::max)())); | 
|---|
| 101 |     BOOST_CHECK_EQUAL(1, lexical_cast<int>(1.0)); | 
|---|
| 102 |  | 
|---|
| 103 |     BOOST_CHECK_THROW(lexical_cast<int>(1.23), bad_lexical_cast); | 
|---|
| 104 |  | 
|---|
| 105 |     BOOST_CHECK_THROW(lexical_cast<int>(1e20), bad_lexical_cast); | 
|---|
| 106 |     BOOST_CHECK_EQUAL(1, lexical_cast<int>(true)); | 
|---|
| 107 |     BOOST_CHECK_EQUAL(0, lexical_cast<int>(false)); | 
|---|
| 108 |     BOOST_CHECK_EQUAL(123, lexical_cast<int>("123")); | 
|---|
| 109 |     BOOST_CHECK_THROW( | 
|---|
| 110 |         lexical_cast<int>(" 123"), bad_lexical_cast); | 
|---|
| 111 |     BOOST_CHECK_THROW(lexical_cast<int>(""), bad_lexical_cast); | 
|---|
| 112 |     BOOST_CHECK_THROW(lexical_cast<int>("Test"), bad_lexical_cast); | 
|---|
| 113 |     BOOST_CHECK_EQUAL(123, lexical_cast<int>("123")); | 
|---|
| 114 |     BOOST_CHECK_EQUAL(123, lexical_cast<int>(std::string("123"))); | 
|---|
| 115 |     BOOST_CHECK_THROW( | 
|---|
| 116 |         lexical_cast<int>(std::string(" 123")), bad_lexical_cast); | 
|---|
| 117 |     BOOST_CHECK_THROW( | 
|---|
| 118 |         lexical_cast<int>(std::string("")), bad_lexical_cast); | 
|---|
| 119 |     BOOST_CHECK_THROW( | 
|---|
| 120 |         lexical_cast<int>(std::string("Test")), bad_lexical_cast); | 
|---|
| 121 | } | 
|---|
| 122 |  | 
|---|
| 123 | void test_conversion_to_double() | 
|---|
| 124 | { | 
|---|
| 125 |     BOOST_CHECK_CLOSE(1.0, lexical_cast<double>('1'), (std::numeric_limits<double>::epsilon())); | 
|---|
| 126 |     BOOST_CHECK_THROW(lexical_cast<double>('A'), bad_lexical_cast); | 
|---|
| 127 |     BOOST_CHECK_CLOSE(1.0, lexical_cast<double>(1), (std::numeric_limits<double>::epsilon())); | 
|---|
| 128 |     BOOST_CHECK_CLOSE(1.23, lexical_cast<double>(1.23), (std::numeric_limits<double>::epsilon())); | 
|---|
| 129 |     BOOST_CHECK_CLOSE(1.234567890, 1.234567890, std::numeric_limits<double>::epsilon()); | 
|---|
| 130 |     BOOST_CHECK_CLOSE(1.0, lexical_cast<double>(true), (std::numeric_limits<double>::epsilon())); | 
|---|
| 131 |     BOOST_CHECK_CLOSE(0.0, lexical_cast<double>(false), (std::numeric_limits<double>::epsilon())); | 
|---|
| 132 |     BOOST_CHECK_CLOSE(1.23, lexical_cast<double>("1.23"), (std::numeric_limits<double>::epsilon())); | 
|---|
| 133 |     BOOST_CHECK_THROW(lexical_cast<double>(""), bad_lexical_cast); | 
|---|
| 134 |     BOOST_CHECK_THROW(lexical_cast<double>("Test"), bad_lexical_cast); | 
|---|
| 135 |     BOOST_CHECK_CLOSE(1.23, lexical_cast<double>(std::string("1.23")), (std::numeric_limits<double>::epsilon())); | 
|---|
| 136 |     BOOST_CHECK_THROW( | 
|---|
| 137 |         lexical_cast<double>(std::string("")), bad_lexical_cast); | 
|---|
| 138 |     BOOST_CHECK_THROW( | 
|---|
| 139 |         lexical_cast<double>(std::string("Test")), bad_lexical_cast); | 
|---|
| 140 | } | 
|---|
| 141 |  | 
|---|
| 142 | void test_conversion_to_bool() | 
|---|
| 143 | { | 
|---|
| 144 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>('1')); | 
|---|
| 145 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>('0')); | 
|---|
| 146 |     BOOST_CHECK_THROW(lexical_cast<bool>('A'), bad_lexical_cast); | 
|---|
| 147 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(1)); | 
|---|
| 148 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(0)); | 
|---|
| 149 |     BOOST_CHECK_THROW(lexical_cast<bool>(123), bad_lexical_cast); | 
|---|
| 150 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(1.0)); | 
|---|
| 151 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(0.0)); | 
|---|
| 152 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(true)); | 
|---|
| 153 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(false)); | 
|---|
| 154 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>("1")); | 
|---|
| 155 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>("0")); | 
|---|
| 156 |     BOOST_CHECK_THROW(lexical_cast<bool>(""), bad_lexical_cast); | 
|---|
| 157 |     BOOST_CHECK_THROW(lexical_cast<bool>("Test"), bad_lexical_cast); | 
|---|
| 158 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>("1")); | 
|---|
| 159 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>("0")); | 
|---|
| 160 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(std::string("1"))); | 
|---|
| 161 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(std::string("0"))); | 
|---|
| 162 |     BOOST_CHECK_THROW( | 
|---|
| 163 |         lexical_cast<bool>(std::string("")), bad_lexical_cast); | 
|---|
| 164 |     BOOST_CHECK_THROW( | 
|---|
| 165 |         lexical_cast<bool>(std::string("Test")), bad_lexical_cast); | 
|---|
| 166 | } | 
|---|
| 167 |  | 
|---|
| 168 | void test_conversion_to_string() | 
|---|
| 169 | { | 
|---|
| 170 |     BOOST_CHECK_EQUAL("A", lexical_cast<std::string>('A')); | 
|---|
| 171 |     BOOST_CHECK_EQUAL(" ", lexical_cast<std::string>(' ')); | 
|---|
| 172 |     BOOST_CHECK_EQUAL("123", lexical_cast<std::string>(123)); | 
|---|
| 173 |     BOOST_CHECK_EQUAL("1.23", lexical_cast<std::string>(1.23)); | 
|---|
| 174 |     BOOST_CHECK_EQUAL("1.111111111", lexical_cast<std::string>(1.111111111)); | 
|---|
| 175 |     BOOST_CHECK_EQUAL("1", lexical_cast<std::string>(true)); | 
|---|
| 176 |     BOOST_CHECK_EQUAL("0", lexical_cast<std::string>(false)); | 
|---|
| 177 |     BOOST_CHECK_EQUAL("Test", lexical_cast<std::string>("Test")); | 
|---|
| 178 |     BOOST_CHECK_EQUAL(" ", lexical_cast<std::string>(" ")); | 
|---|
| 179 |     BOOST_CHECK_EQUAL("", lexical_cast<std::string>("")); | 
|---|
| 180 |     BOOST_CHECK_EQUAL("Test", lexical_cast<std::string>(std::string("Test"))); | 
|---|
| 181 |     BOOST_CHECK_EQUAL(" ", lexical_cast<std::string>(std::string(" "))); | 
|---|
| 182 |     BOOST_CHECK_EQUAL("", lexical_cast<std::string>(std::string(""))); | 
|---|
| 183 | } | 
|---|
| 184 |  | 
|---|
| 185 | void test_conversion_from_to_wchar_t_alias() | 
|---|
| 186 | { | 
|---|
| 187 |     BOOST_CHECK_EQUAL(123u, lexical_cast<unsigned short>("123")); | 
|---|
| 188 |     BOOST_CHECK_EQUAL(123u, lexical_cast<unsigned int>("123")); | 
|---|
| 189 |     BOOST_CHECK_EQUAL(123u, lexical_cast<unsigned long>("123")); | 
|---|
| 190 |     BOOST_CHECK_EQUAL(std::string("123"), | 
|---|
| 191 |         lexical_cast<std::string>(static_cast<unsigned short>(123))); | 
|---|
| 192 |     BOOST_CHECK_EQUAL(std::string("123"), lexical_cast<std::string>(123u)); | 
|---|
| 193 |     BOOST_CHECK_EQUAL(std::string("123"), lexical_cast<std::string>(123ul)); | 
|---|
| 194 | } | 
|---|
| 195 |  | 
|---|
| 196 | void test_conversion_to_pointer() | 
|---|
| 197 | { | 
|---|
| 198 |     BOOST_CHECK_THROW(lexical_cast<char *>("Test"), bad_lexical_cast); | 
|---|
| 199 |     #ifndef DISABLE_WIDE_CHAR_SUPPORT | 
|---|
| 200 |     BOOST_CHECK_THROW(lexical_cast<wchar_t *>("Test"), bad_lexical_cast); | 
|---|
| 201 |     #endif | 
|---|
| 202 | } | 
|---|
| 203 |  | 
|---|
| 204 | void test_conversion_from_wchar_t() | 
|---|
| 205 | { | 
|---|
| 206 | #ifndef DISABLE_WIDE_CHAR_SUPPORT | 
|---|
| 207 | #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) | 
|---|
| 208 |     BOOST_CHECK_EQUAL(1, lexical_cast<int>(L'1')); | 
|---|
| 209 |     BOOST_CHECK_THROW(lexical_cast<int>(L'A'), bad_lexical_cast); | 
|---|
| 210 | #endif | 
|---|
| 211 |  | 
|---|
| 212 |     BOOST_CHECK_EQUAL(123, lexical_cast<int>(L"123")); | 
|---|
| 213 |     BOOST_CHECK_THROW(lexical_cast<int>(L""), bad_lexical_cast); | 
|---|
| 214 |     BOOST_CHECK_THROW(lexical_cast<int>(L"Test"), bad_lexical_cast); | 
|---|
| 215 |  | 
|---|
| 216 | #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) | 
|---|
| 217 |     BOOST_CHECK_EQUAL(1.0, lexical_cast<double>(L'1')); | 
|---|
| 218 |     BOOST_CHECK_THROW(lexical_cast<double>(L'A'), bad_lexical_cast); | 
|---|
| 219 | #endif | 
|---|
| 220 |  | 
|---|
| 221 |     BOOST_CHECK_EQUAL(1.23, lexical_cast<double>(L"1.23")); | 
|---|
| 222 |     BOOST_CHECK_THROW(lexical_cast<double>(L""), bad_lexical_cast); | 
|---|
| 223 |     BOOST_CHECK_THROW(lexical_cast<double>(L"Test"), bad_lexical_cast); | 
|---|
| 224 |  | 
|---|
| 225 | #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) | 
|---|
| 226 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(L'1')); | 
|---|
| 227 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(L'0')); | 
|---|
| 228 |     BOOST_CHECK_THROW(lexical_cast<bool>(L'A'), bad_lexical_cast); | 
|---|
| 229 | #endif | 
|---|
| 230 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(L"1")); | 
|---|
| 231 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(L"0")); | 
|---|
| 232 |     BOOST_CHECK_THROW(lexical_cast<bool>(L""), bad_lexical_cast); | 
|---|
| 233 |     BOOST_CHECK_THROW(lexical_cast<bool>(L"Test"), bad_lexical_cast); | 
|---|
| 234 | #endif | 
|---|
| 235 | } | 
|---|
| 236 |  | 
|---|
| 237 | void test_conversion_to_wchar_t() | 
|---|
| 238 | { | 
|---|
| 239 | #if !defined(DISABLE_WIDE_CHAR_SUPPORT) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) | 
|---|
| 240 |     BOOST_CHECK_EQUAL(L'1', lexical_cast<wchar_t>(1)); | 
|---|
| 241 |     BOOST_CHECK_EQUAL(L'0', lexical_cast<wchar_t>(0)); | 
|---|
| 242 |     BOOST_CHECK_THROW(lexical_cast<wchar_t>(123), bad_lexical_cast); | 
|---|
| 243 |     BOOST_CHECK_EQUAL(L'1', lexical_cast<wchar_t>(1.0)); | 
|---|
| 244 |     BOOST_CHECK_EQUAL(L'0', lexical_cast<wchar_t>(0.0)); | 
|---|
| 245 |     BOOST_CHECK_EQUAL(L'1', lexical_cast<wchar_t>(true)); | 
|---|
| 246 |     BOOST_CHECK_EQUAL(L'0', lexical_cast<wchar_t>(false)); | 
|---|
| 247 |     BOOST_CHECK_EQUAL(L'A', lexical_cast<wchar_t>(L'A')); | 
|---|
| 248 |     BOOST_CHECK_EQUAL(L' ', lexical_cast<wchar_t>(L' ')); | 
|---|
| 249 |     BOOST_CHECK_EQUAL(L'A', lexical_cast<wchar_t>(L"A")); | 
|---|
| 250 |     BOOST_CHECK_EQUAL(L' ', lexical_cast<wchar_t>(L" ")); | 
|---|
| 251 |     BOOST_CHECK_THROW(lexical_cast<wchar_t>(L""), bad_lexical_cast); | 
|---|
| 252 |     BOOST_CHECK_THROW(lexical_cast<wchar_t>(L"Test"), bad_lexical_cast); | 
|---|
| 253 |     BOOST_CHECK_EQUAL(L'A', lexical_cast<wchar_t>(std::wstring(L"A"))); | 
|---|
| 254 |     BOOST_CHECK_EQUAL(L' ', lexical_cast<wchar_t>(std::wstring(L" "))); | 
|---|
| 255 |     BOOST_CHECK_THROW( | 
|---|
| 256 |         lexical_cast<wchar_t>(std::wstring(L"")), bad_lexical_cast); | 
|---|
| 257 |     BOOST_CHECK_THROW( | 
|---|
| 258 |         lexical_cast<wchar_t>(std::wstring(L"Test")), bad_lexical_cast); | 
|---|
| 259 |     #endif | 
|---|
| 260 | } | 
|---|
| 261 |  | 
|---|
| 262 | void test_conversion_from_wstring() | 
|---|
| 263 | { | 
|---|
| 264 |     #ifndef DISABLE_WIDE_CHAR_SUPPORT | 
|---|
| 265 |     BOOST_CHECK_EQUAL(123, lexical_cast<int>(std::wstring(L"123"))); | 
|---|
| 266 |     BOOST_CHECK_THROW( | 
|---|
| 267 |         lexical_cast<int>(std::wstring(L"")), bad_lexical_cast); | 
|---|
| 268 |     BOOST_CHECK_THROW( | 
|---|
| 269 |         lexical_cast<int>(std::wstring(L"Test")), bad_lexical_cast); | 
|---|
| 270 |  | 
|---|
| 271 |     BOOST_CHECK_EQUAL(true, lexical_cast<bool>(std::wstring(L"1"))); | 
|---|
| 272 |     BOOST_CHECK_EQUAL(false, lexical_cast<bool>(std::wstring(L"0"))); | 
|---|
| 273 |     BOOST_CHECK_THROW( | 
|---|
| 274 |         lexical_cast<bool>(std::wstring(L"")), bad_lexical_cast); | 
|---|
| 275 |     BOOST_CHECK_THROW( | 
|---|
| 276 |         lexical_cast<bool>(std::wstring(L"Test")), bad_lexical_cast); | 
|---|
| 277 |     #endif | 
|---|
| 278 | } | 
|---|
| 279 |  | 
|---|
| 280 | void test_conversion_to_wstring() | 
|---|
| 281 | { | 
|---|
| 282 |     #ifndef DISABLE_WIDE_CHAR_SUPPORT | 
|---|
| 283 |     BOOST_CHECK(L"123" == lexical_cast<std::wstring>(123)); | 
|---|
| 284 |     BOOST_CHECK(L"1.23" == lexical_cast<std::wstring>(1.23)); | 
|---|
| 285 |     BOOST_CHECK(L"1.111111111" == lexical_cast<std::wstring>(1.111111111)); | 
|---|
| 286 |     BOOST_CHECK(L"1" == lexical_cast<std::wstring>(true)); | 
|---|
| 287 |     BOOST_CHECK(L"0" == lexical_cast<std::wstring>(false)); | 
|---|
| 288 | #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) | 
|---|
| 289 |     BOOST_CHECK(L"A" == lexical_cast<std::wstring>(L'A')); | 
|---|
| 290 |     BOOST_CHECK(L" " == lexical_cast<std::wstring>(L' ')); | 
|---|
| 291 | #endif | 
|---|
| 292 |     BOOST_CHECK(L"Test" == lexical_cast<std::wstring>(L"Test")); | 
|---|
| 293 |     BOOST_CHECK(L" " == lexical_cast<std::wstring>(L" ")); | 
|---|
| 294 |     BOOST_CHECK(L"" == lexical_cast<std::wstring>(L"")); | 
|---|
| 295 |     BOOST_CHECK(L"Test" == lexical_cast<std::wstring>(std::wstring(L"Test"))); | 
|---|
| 296 |     BOOST_CHECK(L" " == lexical_cast<std::wstring>(std::wstring(L" "))); | 
|---|
| 297 |     BOOST_CHECK(L"" == lexical_cast<std::wstring>(std::wstring(L""))); | 
|---|
| 298 |     #endif | 
|---|
| 299 | } | 
|---|
| 300 |  | 
|---|
| 301 | void test_bad_lexical_cast() | 
|---|
| 302 | { | 
|---|
| 303 |     try | 
|---|
| 304 |     { | 
|---|
| 305 |         lexical_cast<int>(std::string("Test")); | 
|---|
| 306 |  | 
|---|
| 307 |         BOOST_CHECK(false); // Exception expected | 
|---|
| 308 |     } | 
|---|
| 309 |     catch(const bad_lexical_cast &e) | 
|---|
| 310 |     { | 
|---|
| 311 |         BOOST_CHECK(e.source_type() == typeid(std::string)); | 
|---|
| 312 |         BOOST_CHECK(e.target_type() == typeid(int)); | 
|---|
| 313 |     } | 
|---|
| 314 | } | 
|---|
| 315 |  | 
|---|
| 316 | void test_no_whitespace_stripping() | 
|---|
| 317 | { | 
|---|
| 318 |     BOOST_CHECK_THROW(lexical_cast<int>(" 123"), bad_lexical_cast); | 
|---|
| 319 |     BOOST_CHECK_THROW(lexical_cast<int>("123 "), bad_lexical_cast); | 
|---|
| 320 | } | 
|---|