Home | History | Annotate | Download | only in locale.money.get.members
      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