| 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 | } |
|---|