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