Home | History | Annotate | Download | only in locale.money.put.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_put<charT, OutputIterator>
     13 
     14 // iter_type put(iter_type s, bool intl, ios_base& f, char_type fill,
     15 //               long double units) const;
     16 
     17 #include <locale>
     18 #include <ios>
     19 #include <streambuf>
     20 #include <cassert>
     21 #include "test_iterators.h"
     22 
     23 #include "platform_support.h" // locale name macros
     24 
     25 typedef std::money_put<char, output_iterator<char*> > Fn;
     26 
     27 class my_facet
     28     : public Fn
     29 {
     30 public:
     31     explicit my_facet(std::size_t refs = 0)
     32         : Fn(refs) {}
     33 };
     34 
     35 typedef std::money_put<wchar_t, output_iterator<wchar_t*> > Fw;
     36 
     37 class my_facetw
     38     : public Fw
     39 {
     40 public:
     41     explicit my_facetw(std::size_t refs = 0)
     42         : Fw(refs) {}
     43 };
     44 
     45 int 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         long double v = 0;
     62         char str[100];
     63         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
     64                                             false, ios, '*', v);
     65         std::string ex(str, iter.base());
     66         assert(ex == "0,00");
     67     }
     68     {   // negative one
     69         long double v = -1;
     70         char str[100];
     71         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
     72                                             false, ios, '*', v);
     73         std::string ex(str, iter.base());
     74         assert(ex == "-0,01");
     75     }
     76     {   // positive
     77         long double v = 123456789;
     78         char str[100];
     79         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
     80                                             false, ios, '*', v);
     81         std::string ex(str, iter.base());
     82         assert(ex == "1 234 567,89");
     83     }
     84     {   // negative
     85         long double v = -123456789;
     86         char str[100];
     87         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
     88                                             false, ios, '*', v);
     89         std::string ex(str, iter.base());
     90         assert(ex == "-1 234 567,89");
     91     }
     92     {   // zero, showbase
     93         long double v = 0;
     94         showbase(ios);
     95         char str[100];
     96         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
     97                                             false, ios, '*', v);
     98         std::string ex(str, iter.base());
     99         assert(ex == "0,00 \u20ac");
    100     }
    101     {   // negative one, showbase
    102         long double v = -1;
    103         showbase(ios);
    104         char str[100];
    105         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    106                                             false, ios, '*', v);
    107         std::string ex(str, iter.base());
    108         assert(ex == "-0,01 \u20ac");
    109     }
    110     {   // positive, showbase
    111         long double v = 123456789;
    112         showbase(ios);
    113         char str[100];
    114         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    115                                             false, ios, '*', v);
    116         std::string ex(str, iter.base());
    117         assert(ex == "1 234 567,89 \u20ac");
    118     }
    119     {   // negative, showbase
    120         long double v = -123456789;
    121         showbase(ios);
    122         char str[100];
    123         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    124                                             false, ios, '*', v);
    125         std::string ex(str, iter.base());
    126         assert(ex == "-1 234 567,89 \u20ac");
    127     }
    128     {   // negative, showbase, left
    129         long double v = -123456789;
    130         showbase(ios);
    131         ios.width(20);
    132         left(ios);
    133         char str[100];
    134         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    135                                             false, ios, ' ', v);
    136         std::string ex(str, iter.base());
    137         assert(ex == "-1 234 567,89 \u20ac   ");
    138         assert(ios.width() == 0);
    139     }
    140     {   // negative, showbase, internal
    141         long double v = -123456789;
    142         showbase(ios);
    143         ios.width(20);
    144         internal(ios);
    145         char str[100];
    146         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    147                                             false, ios, ' ', v);
    148         std::string ex(str, iter.base());
    149         assert(ex == "-1 234 567,89    \u20ac");
    150         assert(ios.width() == 0);
    151     }
    152     {   // negative, showbase, right
    153         long double v = -123456789;
    154         showbase(ios);
    155         ios.width(20);
    156         right(ios);
    157         char str[100];
    158         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    159                                             false, ios, ' ', v);
    160         std::string ex(str, iter.base());
    161         assert(ex == "   -1 234 567,89 \u20ac");
    162         assert(ios.width() == 0);
    163     }
    164 
    165     // char, international
    166     noshowbase(ios);
    167     ios.unsetf(std::ios_base::adjustfield);
    168     {   // zero
    169         long double v = 0;
    170         char str[100];
    171         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    172                                             true, ios, '*', v);
    173         std::string ex(str, iter.base());
    174         assert(ex == "0,00");
    175     }
    176     {   // negative one
    177         long double v = -1;
    178         char str[100];
    179         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    180                                             true, ios, '*', v);
    181         std::string ex(str, iter.base());
    182         assert(ex == "-0,01");
    183     }
    184     {   // positive
    185         long double v = 123456789;
    186         char str[100];
    187         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    188                                             true, ios, '*', v);
    189         std::string ex(str, iter.base());
    190         assert(ex == "1 234 567,89");
    191     }
    192     {   // negative
    193         long double v = -123456789;
    194         char str[100];
    195         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    196                                             true, ios, '*', v);
    197         std::string ex(str, iter.base());
    198         assert(ex == "-1 234 567,89");
    199     }
    200     {   // zero, showbase
    201         long double v = 0;
    202         showbase(ios);
    203         char str[100];
    204         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    205                                             true, ios, '*', v);
    206         std::string ex(str, iter.base());
    207         assert(ex == "0,00 EUR");
    208     }
    209     {   // negative one, showbase
    210         long double v = -1;
    211         showbase(ios);
    212         char str[100];
    213         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    214                                             true, ios, '*', v);
    215         std::string ex(str, iter.base());
    216         assert(ex == "-0,01 EUR");
    217     }
    218     {   // positive, showbase
    219         long double v = 123456789;
    220         showbase(ios);
    221         char str[100];
    222         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    223                                             true, ios, '*', v);
    224         std::string ex(str, iter.base());
    225         assert(ex == "1 234 567,89 EUR");
    226     }
    227     {   // negative, showbase
    228         long double v = -123456789;
    229         showbase(ios);
    230         char str[100];
    231         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    232                                             true, ios, '*', v);
    233         std::string ex(str, iter.base());
    234         assert(ex == "-1 234 567,89 EUR");
    235     }
    236     {   // negative, showbase, left
    237         long double v = -123456789;
    238         showbase(ios);
    239         ios.width(20);
    240         left(ios);
    241         char str[100];
    242         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    243                                             true, ios, ' ', v);
    244         std::string ex(str, iter.base());
    245         assert(ex == "-1 234 567,89 EUR   ");
    246         assert(ios.width() == 0);
    247     }
    248     {   // negative, showbase, internal
    249         long double v = -123456789;
    250         showbase(ios);
    251         ios.width(20);
    252         internal(ios);
    253         char str[100];
    254         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    255                                             true, ios, ' ', v);
    256         std::string ex(str, iter.base());
    257         assert(ex == "-1 234 567,89    EUR");
    258         assert(ios.width() == 0);
    259     }
    260     {   // negative, showbase, right
    261         long double v = -123456789;
    262         showbase(ios);
    263         ios.width(20);
    264         right(ios);
    265         char str[100];
    266         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
    267                                             true, ios, ' ', v);
    268         std::string ex(str, iter.base());
    269         assert(ex == "   -1 234 567,89 EUR");
    270         assert(ios.width() == 0);
    271     }
    272 }
    273 {
    274     const my_facetw f(1);
    275     // wchar_t, national
    276     noshowbase(ios);
    277     ios.unsetf(std::ios_base::adjustfield);
    278     {   // zero
    279         long double v = 0;
    280         wchar_t str[100];
    281         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    282                                             false, ios, '*', v);
    283         std::wstring ex(str, iter.base());
    284         assert(ex == L"0,00");
    285     }
    286     {   // negative one
    287         long double v = -1;
    288         wchar_t str[100];
    289         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    290                                             false, ios, '*', v);
    291         std::wstring ex(str, iter.base());
    292         assert(ex == L"-0,01");
    293     }
    294     {   // positive
    295         long double v = 123456789;
    296         wchar_t str[100];
    297         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    298                                             false, ios, '*', v);
    299         std::wstring ex(str, iter.base());
    300         assert(ex == L"1 234 567,89");
    301     }
    302     {   // negative
    303         long double v = -123456789;
    304         wchar_t str[100];
    305         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    306                                             false, ios, '*', v);
    307         std::wstring ex(str, iter.base());
    308         assert(ex == L"-1 234 567,89");
    309     }
    310     {   // zero, showbase
    311         long double v = 0;
    312         showbase(ios);
    313         wchar_t str[100];
    314         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    315                                             false, ios, '*', v);
    316         std::wstring ex(str, iter.base());
    317         assert(ex == L"0,00 \u20ac");
    318     }
    319     {   // negative one, showbase
    320         long double v = -1;
    321         showbase(ios);
    322         wchar_t str[100];
    323         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    324                                             false, ios, '*', v);
    325         std::wstring ex(str, iter.base());
    326         assert(ex == L"-0,01 \u20ac");
    327     }
    328     {   // positive, showbase
    329         long double v = 123456789;
    330         showbase(ios);
    331         wchar_t str[100];
    332         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    333                                             false, ios, '*', v);
    334         std::wstring ex(str, iter.base());
    335         assert(ex == L"1 234 567,89 \u20ac");
    336     }
    337     {   // negative, showbase
    338         long double v = -123456789;
    339         showbase(ios);
    340         wchar_t str[100];
    341         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    342                                             false, ios, '*', v);
    343         std::wstring ex(str, iter.base());
    344         assert(ex == L"-1 234 567,89 \u20ac");
    345     }
    346     {   // negative, showbase, left
    347         long double v = -123456789;
    348         showbase(ios);
    349         ios.width(20);
    350         left(ios);
    351         wchar_t str[100];
    352         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    353                                             false, ios, ' ', v);
    354         std::wstring ex(str, iter.base());
    355         assert(ex == L"-1 234 567,89 \u20ac     ");
    356         assert(ios.width() == 0);
    357     }
    358     {   // negative, showbase, internal
    359         long double v = -123456789;
    360         showbase(ios);
    361         ios.width(20);
    362         internal(ios);
    363         wchar_t str[100];
    364         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    365                                             false, ios, ' ', v);
    366         std::wstring ex(str, iter.base());
    367         assert(ex == L"-1 234 567,89      \u20ac");
    368         assert(ios.width() == 0);
    369     }
    370     {   // negative, showbase, right
    371         long double v = -123456789;
    372         showbase(ios);
    373         ios.width(20);
    374         right(ios);
    375         wchar_t str[100];
    376         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    377                                             false, ios, ' ', v);
    378         std::wstring ex(str, iter.base());
    379         assert(ex == L"     -1 234 567,89 \u20ac");
    380         assert(ios.width() == 0);
    381     }
    382 
    383     // wchar_t, international
    384     noshowbase(ios);
    385     ios.unsetf(std::ios_base::adjustfield);
    386     {   // zero
    387         long double v = 0;
    388         wchar_t str[100];
    389         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    390                                             true, ios, '*', v);
    391         std::wstring ex(str, iter.base());
    392         assert(ex == L"0,00");
    393     }
    394     {   // negative one
    395         long double v = -1;
    396         wchar_t str[100];
    397         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    398                                             true, ios, '*', v);
    399         std::wstring ex(str, iter.base());
    400         assert(ex == L"-0,01");
    401     }
    402     {   // positive
    403         long double v = 123456789;
    404         wchar_t str[100];
    405         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    406                                             true, ios, '*', v);
    407         std::wstring ex(str, iter.base());
    408         assert(ex == L"1 234 567,89");
    409     }
    410     {   // negative
    411         long double v = -123456789;
    412         wchar_t str[100];
    413         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    414                                             true, ios, '*', v);
    415         std::wstring ex(str, iter.base());
    416         assert(ex == L"-1 234 567,89");
    417     }
    418     {   // zero, showbase
    419         long double v = 0;
    420         showbase(ios);
    421         wchar_t str[100];
    422         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    423                                             true, ios, '*', v);
    424         std::wstring ex(str, iter.base());
    425         assert(ex == L"0,00 EUR");
    426     }
    427     {   // negative one, showbase
    428         long double v = -1;
    429         showbase(ios);
    430         wchar_t str[100];
    431         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    432                                             true, ios, '*', v);
    433         std::wstring ex(str, iter.base());
    434         assert(ex == L"-0,01 EUR");
    435     }
    436     {   // positive, showbase
    437         long double v = 123456789;
    438         showbase(ios);
    439         wchar_t str[100];
    440         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    441                                             true, ios, '*', v);
    442         std::wstring ex(str, iter.base());
    443         assert(ex == L"1 234 567,89 EUR");
    444     }
    445     {   // negative, showbase
    446         long double v = -123456789;
    447         showbase(ios);
    448         wchar_t str[100];
    449         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    450                                             true, ios, '*', v);
    451         std::wstring ex(str, iter.base());
    452         assert(ex == L"-1 234 567,89 EUR");
    453     }
    454     {   // negative, showbase, left
    455         long double v = -123456789;
    456         showbase(ios);
    457         ios.width(20);
    458         left(ios);
    459         wchar_t str[100];
    460         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    461                                             true, ios, ' ', v);
    462         std::wstring ex(str, iter.base());
    463         assert(ex == L"-1 234 567,89 EUR   ");
    464         assert(ios.width() == 0);
    465     }
    466     {   // negative, showbase, internal
    467         long double v = -123456789;
    468         showbase(ios);
    469         ios.width(20);
    470         internal(ios);
    471         wchar_t str[100];
    472         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    473                                             true, ios, ' ', v);
    474         std::wstring ex(str, iter.base());
    475         assert(ex == L"-1 234 567,89    EUR");
    476         assert(ios.width() == 0);
    477     }
    478     {   // negative, showbase, right
    479         long double v = -123456789;
    480         showbase(ios);
    481         ios.width(20);
    482         right(ios);
    483         wchar_t str[100];
    484         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
    485                                             true, ios, ' ', v);
    486         std::wstring ex(str, iter.base());
    487         assert(ex == L"   -1 234 567,89 EUR");
    488         assert(ios.width() == 0);
    489     }
    490 }
    491 }
    492