1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // XFAIL: apple-darwin 11 12 // REQUIRES: locale.fr_FR.UTF-8 13 14 // <locale> 15 16 // class money_get<charT, InputIterator> 17 18 // iter_type get(iter_type b, iter_type e, bool intl, ios_base& iob, 19 // ios_base::iostate& err, long double& v) const; 20 21 #include <locale> 22 #include <ios> 23 #include <streambuf> 24 #include <cassert> 25 #include "test_iterators.h" 26 27 #include "platform_support.h" // locale name macros 28 29 typedef std::money_get<char, input_iterator<const char*> > Fn; 30 31 class my_facet 32 : public Fn 33 { 34 public: 35 explicit my_facet(std::size_t refs = 0) 36 : Fn(refs) {} 37 }; 38 39 typedef std::money_get<wchar_t, input_iterator<const wchar_t*> > Fw; 40 41 class my_facetw 42 : public Fw 43 { 44 public: 45 explicit my_facetw(std::size_t refs = 0) 46 : Fw(refs) {} 47 }; 48 49 int main() 50 { 51 std::ios ios(0); 52 std::string loc_name(LOCALE_fr_FR_UTF_8); 53 ios.imbue(std::locale(ios.getloc(), 54 new std::moneypunct_byname<char, false>(loc_name))); 55 ios.imbue(std::locale(ios.getloc(), 56 new std::moneypunct_byname<char, true>(loc_name))); 57 ios.imbue(std::locale(ios.getloc(), 58 new std::moneypunct_byname<wchar_t, false>(loc_name))); 59 ios.imbue(std::locale(ios.getloc(), 60 new std::moneypunct_byname<wchar_t, true>(loc_name))); 61 { 62 const my_facet f(1); 63 // char, national 64 { // zero 65 std::string v = "0,00"; 66 typedef input_iterator<const char*> I; 67 long double ex; 68 std::ios_base::iostate err = std::ios_base::goodbit; 69 I iter = f.get(I(v.data()), I(v.data() + v.size()), 70 false, ios, err, ex); 71 assert(iter.base() == v.data() + v.size()); 72 assert(err == std::ios_base::eofbit); 73 assert(ex == 0); 74 } 75 { // negative one 76 std::string v = "-0,01"; 77 typedef input_iterator<const char*> I; 78 long double ex; 79 std::ios_base::iostate err = std::ios_base::goodbit; 80 I iter = f.get(I(v.data()), I(v.data() + v.size()), 81 false, ios, err, ex); 82 assert(iter.base() == v.data() + v.size()); 83 assert(err == std::ios_base::eofbit); 84 assert(ex == -1); 85 } 86 { // positive 87 std::string v = "1 234 567,89 "; 88 typedef input_iterator<const char*> I; 89 long double ex; 90 std::ios_base::iostate err = std::ios_base::goodbit; 91 I iter = f.get(I(v.data()), I(v.data() + v.size()), 92 false, ios, err, ex); 93 assert(iter.base() == v.data() + v.size()); 94 assert(err == std::ios_base::eofbit); 95 assert(ex == 123456789); 96 } 97 { // negative 98 std::string v = "-1 234 567,89"; 99 typedef input_iterator<const char*> I; 100 long double ex; 101 std::ios_base::iostate err = std::ios_base::goodbit; 102 I iter = f.get(I(v.data()), I(v.data() + v.size()), 103 false, ios, err, ex); 104 assert(iter.base() == v.data() + v.size()); 105 assert(err == std::ios_base::eofbit); 106 assert(ex == -123456789); 107 } 108 { // negative 109 std::string v = "-1234567,89"; 110 typedef input_iterator<const char*> I; 111 long double ex; 112 std::ios_base::iostate err = std::ios_base::goodbit; 113 I iter = f.get(I(v.data()), I(v.data() + v.size()), 114 false, ios, err, ex); 115 assert(iter.base() == v.data() + v.size()); 116 assert(err == std::ios_base::eofbit); 117 assert(ex == -123456789); 118 } 119 { // zero, showbase 120 std::string v = "0,00 \u20ac"; // 121 showbase(ios); 122 typedef input_iterator<const char*> I; 123 long double ex; 124 std::ios_base::iostate err = std::ios_base::goodbit; 125 I iter = f.get(I(v.data()), I(v.data() + v.size()), 126 false, ios, err, ex); 127 assert(iter.base() == v.data() + v.size()); 128 assert(err == std::ios_base::eofbit); 129 assert(ex == 0); 130 } 131 { // zero, showbase 132 std::string v = "0,00 \u20ac"; // 133 showbase(ios); 134 typedef input_iterator<const char*> I; 135 long double ex; 136 std::ios_base::iostate err = std::ios_base::goodbit; 137 I iter = f.get(I(v.data()), I(v.data() + v.size()), 138 false, ios, err, ex); 139 assert(iter.base() == v.data() + v.size()); 140 assert(err == std::ios_base::eofbit); 141 assert(ex == 0); 142 } 143 { // negative one, showbase 144 std::string v = "-0,01 \u20ac"; 145 typedef input_iterator<const char*> I; 146 long double ex; 147 std::ios_base::iostate err = std::ios_base::goodbit; 148 I iter = f.get(I(v.data()), I(v.data() + v.size()), 149 false, ios, err, ex); 150 assert(iter.base() == v.data() + v.size()); 151 assert(err == std::ios_base::eofbit); 152 assert(ex == -1); 153 } 154 { // negative one, showbase 155 std::string v = "-0,01 \u20ac"; 156 showbase(ios); 157 typedef input_iterator<const char*> I; 158 long double ex; 159 std::ios_base::iostate err = std::ios_base::goodbit; 160 I iter = f.get(I(v.data()), I(v.data() + v.size()), 161 false, ios, err, ex); 162 assert(iter.base() == v.data() + v.size()); 163 assert(err == std::ios_base::eofbit); 164 assert(ex == -1); 165 } 166 { // positive, showbase 167 std::string v = "1 234 567,89 \u20ac"; 168 typedef input_iterator<const char*> I; 169 long double ex; 170 std::ios_base::iostate err = std::ios_base::goodbit; 171 I iter = f.get(I(v.data()), I(v.data() + v.size()), 172 false, ios, err, ex); 173 assert(iter.base() == v.data() + v.size()); 174 assert(err == std::ios_base::eofbit); 175 assert(ex == 123456789); 176 } 177 { // positive, showbase 178 std::string v = "1 234 567,89 \u20ac"; 179 showbase(ios); 180 typedef input_iterator<const char*> I; 181 long double ex; 182 std::ios_base::iostate err = std::ios_base::goodbit; 183 I iter = f.get(I(v.data()), I(v.data() + v.size()), 184 false, ios, err, ex); 185 assert(iter.base() == v.data() + v.size()); 186 assert(err == std::ios_base::eofbit); 187 assert(ex == 123456789); 188 noshowbase(ios); 189 } 190 { // negative, showbase 191 std::string v = "-1 234 567,89 \u20ac"; 192 showbase(ios); 193 typedef input_iterator<const char*> I; 194 long double ex; 195 std::ios_base::iostate err = std::ios_base::goodbit; 196 I iter = f.get(I(v.data()), I(v.data() + v.size()), 197 false, ios, err, ex); 198 assert(iter.base() == v.data() + v.size()); 199 assert(err == std::ios_base::eofbit); 200 assert(ex == -123456789); 201 noshowbase(ios); 202 } 203 { // negative, showbase 204 std::string v = "1 234 567,89 EUR -"; 205 showbase(ios); 206 typedef input_iterator<const char*> I; 207 long double ex; 208 std::ios_base::iostate err = std::ios_base::goodbit; 209 I iter = f.get(I(v.data()), I(v.data() + v.size()), 210 false, ios, err, ex); 211 assert(iter.base() == v.data() + 13); 212 assert(err == std::ios_base::failbit); 213 noshowbase(ios); 214 } 215 { // negative, showbase 216 std::string v = "1 234 567,89 EUR -"; 217 typedef input_iterator<const char*> I; 218 long double ex; 219 std::ios_base::iostate err = std::ios_base::goodbit; 220 I iter = f.get(I(v.data()), I(v.data() + v.size()), 221 false, ios, err, ex); 222 assert(iter.base() == v.data() + 13); 223 assert(err == std::ios_base::goodbit); 224 assert(ex == 123456789); 225 } 226 noshowbase(ios); 227 } 228 { 229 const my_facet f(1); 230 // char, international 231 { // zero 232 std::string v = "0,00"; 233 typedef input_iterator<const char*> I; 234 long double ex; 235 std::ios_base::iostate err = std::ios_base::goodbit; 236 I iter = f.get(I(v.data()), I(v.data() + v.size()), 237 true, ios, err, ex); 238 assert(iter.base() == v.data() + v.size()); 239 assert(err == std::ios_base::eofbit); 240 assert(ex == 0); 241 } 242 { // negative one 243 std::string v = "-0,01"; 244 typedef input_iterator<const char*> I; 245 long double ex; 246 std::ios_base::iostate err = std::ios_base::goodbit; 247 I iter = f.get(I(v.data()), I(v.data() + v.size()), 248 true, ios, err, ex); 249 assert(iter.base() == v.data() + v.size()); 250 assert(err == std::ios_base::eofbit); 251 assert(ex == -1); 252 } 253 { // positive 254 std::string v = "1 234 567,89 "; 255 typedef input_iterator<const char*> I; 256 long double ex; 257 std::ios_base::iostate err = std::ios_base::goodbit; 258 I iter = f.get(I(v.data()), I(v.data() + v.size()), 259 true, ios, err, ex); 260 assert(iter.base() == v.data() + v.size()); 261 assert(err == std::ios_base::eofbit); 262 assert(ex == 123456789); 263 } 264 { // negative 265 std::string v = "-1 234 567,89"; 266 typedef input_iterator<const char*> I; 267 long double ex; 268 std::ios_base::iostate err = std::ios_base::goodbit; 269 I iter = f.get(I(v.data()), I(v.data() + v.size()), 270 true, ios, err, ex); 271 assert(iter.base() == v.data() + v.size()); 272 assert(err == std::ios_base::eofbit); 273 assert(ex == -123456789); 274 } 275 { // negative 276 std::string v = "-1234567,89"; 277 typedef input_iterator<const char*> I; 278 long double ex; 279 std::ios_base::iostate err = std::ios_base::goodbit; 280 I iter = f.get(I(v.data()), I(v.data() + v.size()), 281 true, ios, err, ex); 282 assert(iter.base() == v.data() + v.size()); 283 assert(err == std::ios_base::eofbit); 284 assert(ex == -123456789); 285 } 286 { // zero, showbase 287 std::string v = "0,00 EUR"; 288 showbase(ios); 289 typedef input_iterator<const char*> I; 290 long double ex; 291 std::ios_base::iostate err = std::ios_base::goodbit; 292 I iter = f.get(I(v.data()), I(v.data() + v.size()), 293 true, ios, err, ex); 294 assert(iter.base() == v.data() + v.size()); 295 assert(err == std::ios_base::eofbit); 296 assert(ex == 0); 297 } 298 { // zero, showbase 299 std::string v = "0,00 EUR"; 300 showbase(ios); 301 typedef input_iterator<const char*> I; 302 long double ex; 303 std::ios_base::iostate err = std::ios_base::goodbit; 304 I iter = f.get(I(v.data()), I(v.data() + v.size()), 305 true, ios, err, ex); 306 assert(iter.base() == v.data() + v.size()); 307 assert(err == std::ios_base::eofbit); 308 assert(ex == 0); 309 } 310 { // negative one, showbase 311 std::string v = "-0,01 EUR"; 312 typedef input_iterator<const char*> I; 313 long double ex; 314 std::ios_base::iostate err = std::ios_base::goodbit; 315 I iter = f.get(I(v.data()), I(v.data() + v.size()), 316 true, ios, err, ex); 317 assert(iter.base() == v.data() + v.size()); 318 assert(err == std::ios_base::eofbit); 319 assert(ex == -1); 320 } 321 { // negative one, showbase 322 std::string v = "-0,01 EUR"; 323 showbase(ios); 324 typedef input_iterator<const char*> I; 325 long double ex; 326 std::ios_base::iostate err = std::ios_base::goodbit; 327 I iter = f.get(I(v.data()), I(v.data() + v.size()), 328 true, ios, err, ex); 329 assert(iter.base() == v.data() + v.size()); 330 assert(err == std::ios_base::eofbit); 331 assert(ex == -1); 332 } 333 { // positive, showbase 334 std::string v = "1 234 567,89 EUR"; 335 typedef input_iterator<const char*> I; 336 long double ex; 337 std::ios_base::iostate err = std::ios_base::goodbit; 338 I iter = f.get(I(v.data()), I(v.data() + v.size()), 339 true, ios, err, ex); 340 assert(iter.base() == v.data() + v.size()); 341 assert(err == std::ios_base::eofbit); 342 assert(ex == 123456789); 343 } 344 { // positive, showbase 345 std::string v = "1 234 567,89 EUR"; 346 showbase(ios); 347 typedef input_iterator<const char*> I; 348 long double ex; 349 std::ios_base::iostate err = std::ios_base::goodbit; 350 I iter = f.get(I(v.data()), I(v.data() + v.size()), 351 true, ios, err, ex); 352 assert(iter.base() == v.data() + v.size()); 353 assert(err == std::ios_base::eofbit); 354 assert(ex == 123456789); 355 noshowbase(ios); 356 } 357 { // negative, showbase 358 std::string v = "-1 234 567,89 EUR"; 359 showbase(ios); 360 typedef input_iterator<const char*> I; 361 long double ex; 362 std::ios_base::iostate err = std::ios_base::goodbit; 363 I iter = f.get(I(v.data()), I(v.data() + v.size()), 364 true, ios, err, ex); 365 assert(iter.base() == v.data() + v.size()); 366 assert(err == std::ios_base::eofbit); 367 assert(ex == -123456789); 368 noshowbase(ios); 369 } 370 { // negative, showbase 371 std::string v = "1 234 567,89 Eu-"; 372 showbase(ios); 373 typedef input_iterator<const char*> I; 374 long double ex; 375 std::ios_base::iostate err = std::ios_base::goodbit; 376 I iter = f.get(I(v.data()), I(v.data() + v.size()), 377 true, ios, err, ex); 378 assert(iter.base() == v.data() + 14); 379 assert(err == std::ios_base::failbit); 380 noshowbase(ios); 381 } 382 { // negative, showbase 383 std::string v = "1 234 567,89 Eu-"; 384 typedef input_iterator<const char*> I; 385 long double ex; 386 std::ios_base::iostate err = std::ios_base::goodbit; 387 I iter = f.get(I(v.data()), I(v.data() + v.size()), 388 true, ios, err, ex); 389 assert(iter.base() == v.data() + 13); 390 assert(err == std::ios_base::goodbit); 391 assert(ex == 123456789); 392 } 393 } 394 { 395 const my_facetw f(1); 396 // wchar_t, national 397 { // zero 398 std::wstring v = L"0,00"; 399 typedef input_iterator<const wchar_t*> I; 400 long double ex; 401 std::ios_base::iostate err = std::ios_base::goodbit; 402 I iter = f.get(I(v.data()), I(v.data() + v.size()), 403 false, ios, err, ex); 404 assert(iter.base() == v.data() + v.size()); 405 assert(err == std::ios_base::eofbit); 406 assert(ex == 0); 407 } 408 { // negative one 409 std::wstring v = L"-0,01"; 410 typedef input_iterator<const wchar_t*> I; 411 long double ex; 412 std::ios_base::iostate err = std::ios_base::goodbit; 413 I iter = f.get(I(v.data()), I(v.data() + v.size()), 414 false, ios, err, ex); 415 assert(iter.base() == v.data() + v.size()); 416 assert(err == std::ios_base::eofbit); 417 assert(ex == -1); 418 } 419 { // positive 420 std::wstring v = L"1 234 567,89 "; 421 typedef input_iterator<const wchar_t*> I; 422 long double ex; 423 std::ios_base::iostate err = std::ios_base::goodbit; 424 I iter = f.get(I(v.data()), I(v.data() + v.size()), 425 false, ios, err, ex); 426 assert(iter.base() == v.data() + v.size()); 427 assert(err == std::ios_base::eofbit); 428 assert(ex == 123456789); 429 } 430 { // negative 431 std::wstring v = L"-1 234 567,89"; 432 typedef input_iterator<const wchar_t*> I; 433 long double ex; 434 std::ios_base::iostate err = std::ios_base::goodbit; 435 I iter = f.get(I(v.data()), I(v.data() + v.size()), 436 false, ios, err, ex); 437 assert(iter.base() == v.data() + v.size()); 438 assert(err == std::ios_base::eofbit); 439 assert(ex == -123456789); 440 } 441 { // negative 442 std::wstring v = L"-1234567,89"; 443 typedef input_iterator<const wchar_t*> I; 444 long double ex; 445 std::ios_base::iostate err = std::ios_base::goodbit; 446 I iter = f.get(I(v.data()), I(v.data() + v.size()), 447 false, ios, err, ex); 448 assert(iter.base() == v.data() + v.size()); 449 assert(err == std::ios_base::eofbit); 450 assert(ex == -123456789); 451 } 452 { // zero, showbase 453 std::wstring v = L"0,00 \u20ac"; 454 showbase(ios); 455 typedef input_iterator<const wchar_t*> I; 456 long double ex; 457 std::ios_base::iostate err = std::ios_base::goodbit; 458 I iter = f.get(I(v.data()), I(v.data() + v.size()), 459 false, ios, err, ex); 460 assert(iter.base() == v.data() + v.size()); 461 assert(err == std::ios_base::eofbit); 462 assert(ex == 0); 463 } 464 { // zero, showbase 465 std::wstring v = L"0,00 \u20ac"; 466 showbase(ios); 467 typedef input_iterator<const wchar_t*> I; 468 long double ex; 469 std::ios_base::iostate err = std::ios_base::goodbit; 470 I iter = f.get(I(v.data()), I(v.data() + v.size()), 471 false, ios, err, ex); 472 assert(iter.base() == v.data() + v.size()); 473 assert(err == std::ios_base::eofbit); 474 assert(ex == 0); 475 } 476 { // negative one, showbase 477 std::wstring v = L"-0,01 \u20ac"; 478 typedef input_iterator<const wchar_t*> I; 479 long double ex; 480 std::ios_base::iostate err = std::ios_base::goodbit; 481 I iter = f.get(I(v.data()), I(v.data() + v.size()), 482 false, ios, err, ex); 483 assert(iter.base() == v.data() + v.size()); 484 assert(err == std::ios_base::eofbit); 485 assert(ex == -1); 486 } 487 { // negative one, showbase 488 std::wstring v = L"-0,01 \u20ac"; 489 showbase(ios); 490 typedef input_iterator<const wchar_t*> I; 491 long double ex; 492 std::ios_base::iostate err = std::ios_base::goodbit; 493 I iter = f.get(I(v.data()), I(v.data() + v.size()), 494 false, ios, err, ex); 495 assert(iter.base() == v.data() + v.size()); 496 assert(err == std::ios_base::eofbit); 497 assert(ex == -1); 498 } 499 { // positive, showbase 500 std::wstring v = L"1 234 567,89 \u20ac"; 501 typedef input_iterator<const wchar_t*> I; 502 long double ex; 503 std::ios_base::iostate err = std::ios_base::goodbit; 504 I iter = f.get(I(v.data()), I(v.data() + v.size()), 505 false, ios, err, ex); 506 assert(iter.base() == v.data() + v.size()); 507 assert(err == std::ios_base::eofbit); 508 assert(ex == 123456789); 509 } 510 { // positive, showbase 511 std::wstring v = L"1 234 567,89 \u20ac"; 512 showbase(ios); 513 typedef input_iterator<const wchar_t*> I; 514 long double ex; 515 std::ios_base::iostate err = std::ios_base::goodbit; 516 I iter = f.get(I(v.data()), I(v.data() + v.size()), 517 false, ios, err, ex); 518 assert(iter.base() == v.data() + v.size()); 519 assert(err == std::ios_base::eofbit); 520 assert(ex == 123456789); 521 noshowbase(ios); 522 } 523 { // negative, showbase 524 std::wstring v = L"-1 234 567,89 \u20ac"; 525 showbase(ios); 526 typedef input_iterator<const wchar_t*> I; 527 long double ex; 528 std::ios_base::iostate err = std::ios_base::goodbit; 529 I iter = f.get(I(v.data()), I(v.data() + v.size()), 530 false, ios, err, ex); 531 assert(iter.base() == v.data() + v.size()); 532 assert(err == std::ios_base::eofbit); 533 assert(ex == -123456789); 534 noshowbase(ios); 535 } 536 { // negative, showbase 537 std::wstring v = L"1 234 567,89 EUR -"; 538 showbase(ios); 539 typedef input_iterator<const wchar_t*> I; 540 long double ex; 541 std::ios_base::iostate err = std::ios_base::goodbit; 542 I iter = f.get(I(v.data()), I(v.data() + v.size()), 543 false, ios, err, ex); 544 assert(iter.base() == v.data() + 13); 545 assert(err == std::ios_base::failbit); 546 noshowbase(ios); 547 } 548 { // negative, showbase 549 std::wstring v = L"1 234 567,89 EUR -"; 550 typedef input_iterator<const wchar_t*> I; 551 long double ex; 552 std::ios_base::iostate err = std::ios_base::goodbit; 553 I iter = f.get(I(v.data()), I(v.data() + v.size()), 554 false, ios, err, ex); 555 assert(iter.base() == v.data() + 13); 556 assert(err == std::ios_base::goodbit); 557 assert(ex == 123456789); 558 } 559 } 560 { 561 const my_facetw f(1); 562 // wchar_t, international 563 { // zero 564 std::wstring v = L"0,00"; 565 typedef input_iterator<const wchar_t*> I; 566 long double ex; 567 std::ios_base::iostate err = std::ios_base::goodbit; 568 I iter = f.get(I(v.data()), I(v.data() + v.size()), 569 true, ios, err, ex); 570 assert(iter.base() == v.data() + v.size()); 571 assert(err == std::ios_base::eofbit); 572 assert(ex == 0); 573 } 574 { // negative one 575 std::wstring v = L"-0,01"; 576 typedef input_iterator<const wchar_t*> I; 577 long double ex; 578 std::ios_base::iostate err = std::ios_base::goodbit; 579 I iter = f.get(I(v.data()), I(v.data() + v.size()), 580 true, ios, err, ex); 581 assert(iter.base() == v.data() + v.size()); 582 assert(err == std::ios_base::eofbit); 583 assert(ex == -1); 584 } 585 { // positive 586 std::wstring v = L"1 234 567,89 "; 587 typedef input_iterator<const wchar_t*> I; 588 long double ex; 589 std::ios_base::iostate err = std::ios_base::goodbit; 590 I iter = f.get(I(v.data()), I(v.data() + v.size()), 591 true, ios, err, ex); 592 assert(iter.base() == v.data() + v.size()); 593 assert(err == std::ios_base::eofbit); 594 assert(ex == 123456789); 595 } 596 { // negative 597 std::wstring v = L"-1 234 567,89"; 598 typedef input_iterator<const wchar_t*> I; 599 long double ex; 600 std::ios_base::iostate err = std::ios_base::goodbit; 601 I iter = f.get(I(v.data()), I(v.data() + v.size()), 602 true, ios, err, ex); 603 assert(iter.base() == v.data() + v.size()); 604 assert(err == std::ios_base::eofbit); 605 assert(ex == -123456789); 606 } 607 { // negative 608 std::wstring v = L"-1234567,89"; 609 typedef input_iterator<const wchar_t*> I; 610 long double ex; 611 std::ios_base::iostate err = std::ios_base::goodbit; 612 I iter = f.get(I(v.data()), I(v.data() + v.size()), 613 true, ios, err, ex); 614 assert(iter.base() == v.data() + v.size()); 615 assert(err == std::ios_base::eofbit); 616 assert(ex == -123456789); 617 } 618 { // zero, showbase 619 std::wstring v = L"0,00 EUR"; 620 showbase(ios); 621 typedef input_iterator<const wchar_t*> I; 622 long double ex; 623 std::ios_base::iostate err = std::ios_base::goodbit; 624 I iter = f.get(I(v.data()), I(v.data() + v.size()), 625 true, ios, err, ex); 626 assert(iter.base() == v.data() + v.size()); 627 assert(err == std::ios_base::eofbit); 628 assert(ex == 0); 629 } 630 { // zero, showbase 631 std::wstring v = L"0,00 EUR"; 632 showbase(ios); 633 typedef input_iterator<const wchar_t*> I; 634 long double ex; 635 std::ios_base::iostate err = std::ios_base::goodbit; 636 I iter = f.get(I(v.data()), I(v.data() + v.size()), 637 true, ios, err, ex); 638 assert(iter.base() == v.data() + v.size()); 639 assert(err == std::ios_base::eofbit); 640 assert(ex == 0); 641 } 642 { // negative one, showbase 643 std::wstring v = L"-0,01 EUR"; 644 typedef input_iterator<const wchar_t*> I; 645 long double ex; 646 std::ios_base::iostate err = std::ios_base::goodbit; 647 I iter = f.get(I(v.data()), I(v.data() + v.size()), 648 true, ios, err, ex); 649 assert(iter.base() == v.data() + v.size()); 650 assert(err == std::ios_base::eofbit); 651 assert(ex == -1); 652 } 653 { // negative one, showbase 654 std::wstring v = L"-0,01 EUR"; 655 showbase(ios); 656 typedef input_iterator<const wchar_t*> I; 657 long double ex; 658 std::ios_base::iostate err = std::ios_base::goodbit; 659 I iter = f.get(I(v.data()), I(v.data() + v.size()), 660 true, ios, err, ex); 661 assert(iter.base() == v.data() + v.size()); 662 assert(err == std::ios_base::eofbit); 663 assert(ex == -1); 664 } 665 { // positive, showbase 666 std::wstring v = L"1 234 567,89 EUR"; 667 typedef input_iterator<const wchar_t*> I; 668 long double ex; 669 std::ios_base::iostate err = std::ios_base::goodbit; 670 I iter = f.get(I(v.data()), I(v.data() + v.size()), 671 true, ios, err, ex); 672 assert(iter.base() == v.data() + v.size()); 673 assert(err == std::ios_base::eofbit); 674 assert(ex == 123456789); 675 } 676 { // positive, showbase 677 std::wstring v = L"1 234 567,89 EUR"; 678 showbase(ios); 679 typedef input_iterator<const wchar_t*> I; 680 long double ex; 681 std::ios_base::iostate err = std::ios_base::goodbit; 682 I iter = f.get(I(v.data()), I(v.data() + v.size()), 683 true, ios, err, ex); 684 assert(iter.base() == v.data() + v.size()); 685 assert(err == std::ios_base::eofbit); 686 assert(ex == 123456789); 687 noshowbase(ios); 688 } 689 { // negative, showbase 690 std::wstring v = L"-1 234 567,89 EUR"; 691 showbase(ios); 692 typedef input_iterator<const wchar_t*> I; 693 long double ex; 694 std::ios_base::iostate err = std::ios_base::goodbit; 695 I iter = f.get(I(v.data()), I(v.data() + v.size()), 696 true, ios, err, ex); 697 assert(iter.base() == v.data() + v.size()); 698 assert(err == std::ios_base::eofbit); 699 assert(ex == -123456789); 700 noshowbase(ios); 701 } 702 { // negative, showbase 703 std::wstring v = L"1 234 567,89 Eu-"; 704 showbase(ios); 705 typedef input_iterator<const wchar_t*> I; 706 long double ex; 707 std::ios_base::iostate err = std::ios_base::goodbit; 708 I iter = f.get(I(v.data()), I(v.data() + v.size()), 709 true, ios, err, ex); 710 assert(iter.base() == v.data() + 14); 711 assert(err == std::ios_base::failbit); 712 noshowbase(ios); 713 } 714 { // negative, showbase 715 std::wstring v = L"1 234 567,89 Eu-"; 716 typedef input_iterator<const wchar_t*> I; 717 long double ex; 718 std::ios_base::iostate err = std::ios_base::goodbit; 719 I iter = f.get(I(v.data()), I(v.data() + v.size()), 720 true, ios, err, ex); 721 assert(iter.base() == v.data() + 13); 722 assert(err == std::ios_base::goodbit); 723 assert(ex == 123456789); 724 } 725 } 726 } 727