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