Home | History | Annotate | Download | only in facet.num.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 num_put<charT, OutputIterator>
     13 
     14 // iter_type put(iter_type s, ios_base& iob, char_type fill, long long v) const;
     15 
     16 #include <locale>
     17 #include <ios>
     18 #include <cassert>
     19 #include <streambuf>
     20 #include "test_iterators.h"
     21 
     22 typedef std::num_put<char, output_iterator<char*> > F;
     23 
     24 class my_facet
     25     : public F
     26 {
     27 public:
     28     explicit my_facet(std::size_t refs = 0)
     29         : F(refs) {}
     30 };
     31 
     32 class my_numpunct
     33     : public std::numpunct<char>
     34 {
     35 public:
     36     my_numpunct() : std::numpunct<char>() {}
     37 
     38 protected:
     39     virtual char_type do_thousands_sep() const {return '_';}
     40     virtual std::string do_grouping() const {return std::string("\1\2\3");}
     41 };
     42 
     43 int main()
     44 {
     45     const my_facet f(1);
     46     {
     47         std::ios ios(0);
     48         long long v = 0;
     49         char str[50];
     50         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     51         std::string ex(str, iter.base());
     52         assert(ex == "0");
     53     }
     54     {
     55         std::ios ios(0);
     56         long long v = 1;
     57         char str[50];
     58         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     59         std::string ex(str, iter.base());
     60         assert(ex == "1");
     61     }
     62     {
     63         std::ios ios(0);
     64         long long v = -1;
     65         char str[50];
     66         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     67         std::string ex(str, iter.base());
     68         assert(ex == "-1");
     69     }
     70     {
     71         std::ios ios(0);
     72         long long v = -1000;
     73         char str[50];
     74         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     75         std::string ex(str, iter.base());
     76         assert(ex == "-1000");
     77     }
     78     {
     79         std::ios ios(0);
     80         long long v = 1000;
     81         char str[50];
     82         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     83         std::string ex(str, iter.base());
     84         assert(ex == "1000");
     85     }
     86     {
     87         std::ios ios(0);
     88         showpos(ios);
     89         long long v = 1000;
     90         char str[50];
     91         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     92         std::string ex(str, iter.base());
     93         assert(ex == "+1000");
     94     }
     95     {
     96         std::ios ios(0);
     97         oct(ios);
     98         long long v = 1000;
     99         char str[50];
    100         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    101         std::string ex(str, iter.base());
    102         assert(ex == "1750");
    103     }
    104     {
    105         std::ios ios(0);
    106         oct(ios);
    107         showbase(ios);
    108         long long v = 1000;
    109         char str[50];
    110         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    111         std::string ex(str, iter.base());
    112         assert(ex == "01750");
    113     }
    114     {
    115         std::ios ios(0);
    116         hex(ios);
    117         long long v = 1000;
    118         char str[50];
    119         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    120         std::string ex(str, iter.base());
    121         assert(ex == "3e8");
    122     }
    123     {
    124         std::ios ios(0);
    125         hex(ios);
    126         showbase(ios);
    127         long long v = 1000;
    128         char str[50];
    129         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    130         std::string ex(str, iter.base());
    131         assert(ex == "0x3e8");
    132     }
    133     {
    134         std::ios ios(0);
    135         hex(ios);
    136         showbase(ios);
    137         uppercase(ios);
    138         long long v = 1000;
    139         char str[50];
    140         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    141         std::string ex(str, iter.base());
    142         assert(ex == "0X3E8");
    143     }
    144     {
    145         std::ios ios(0);
    146         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    147         hex(ios);
    148         showbase(ios);
    149         uppercase(ios);
    150         long long v = 1000;
    151         char str[50];
    152         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    153         std::string ex(str, iter.base());
    154         assert(ex == "0X3E_8");
    155     }
    156     {
    157         std::ios ios(0);
    158         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    159         hex(ios);
    160         showbase(ios);
    161         long long v = 2147483647;
    162         char str[50];
    163         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    164         std::string ex(str, iter.base());
    165         assert(ex == "0x7f_fff_ff_f");
    166     }
    167     {
    168         std::ios ios(0);
    169         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    170         oct(ios);
    171         long long v = 0123467;
    172         char str[50];
    173         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    174         std::string ex(str, iter.base());
    175         assert(ex == "123_46_7");
    176     }
    177     {
    178         std::ios ios(0);
    179         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    180         oct(ios);
    181         showbase(ios);
    182         long long v = 0123467;
    183         char str[50];
    184         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    185         std::string ex(str, iter.base());
    186         assert(ex == "0_123_46_7");
    187     }
    188     {
    189         std::ios ios(0);
    190         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    191         oct(ios);
    192         showbase(ios);
    193         right(ios);
    194         ios.width(15);
    195         long long v = 0123467;
    196         char str[50];
    197         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    198         std::string ex(str, iter.base());
    199         assert(ex == "*****0_123_46_7");
    200     }
    201     {
    202         std::ios ios(0);
    203         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    204         oct(ios);
    205         showbase(ios);
    206         left(ios);
    207         ios.width(15);
    208         long long v = 0123467;
    209         char str[50];
    210         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    211         std::string ex(str, iter.base());
    212         assert(ex == "0_123_46_7*****");
    213     }
    214     {
    215         std::ios ios(0);
    216         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    217         oct(ios);
    218         showbase(ios);
    219         internal(ios);
    220         ios.width(15);
    221         long long v = 0123467;
    222         char str[50];
    223         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    224         std::string ex(str, iter.base());
    225         assert(ex == "*****0_123_46_7");
    226         assert(ios.width() == 0);
    227     }
    228     {
    229         std::ios ios(0);
    230         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    231         hex(ios);
    232         showbase(ios);
    233         right(ios);
    234         ios.width(15);
    235         long long v = 2147483647;
    236         char str[50];
    237         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    238         std::string ex(str, iter.base());
    239         assert(ex == "**0x7f_fff_ff_f");
    240     }
    241     {
    242         std::ios ios(0);
    243         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    244         hex(ios);
    245         showbase(ios);
    246         left(ios);
    247         ios.width(15);
    248         long long v = 2147483647;
    249         char str[50];
    250         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    251         std::string ex(str, iter.base());
    252         assert(ex == "0x7f_fff_ff_f**");
    253     }
    254     {
    255         std::ios ios(0);
    256         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    257         hex(ios);
    258         showbase(ios);
    259         internal(ios);
    260         ios.width(15);
    261         long long v = 2147483647;
    262         char str[50];
    263         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    264         std::string ex(str, iter.base());
    265         assert(ex == "0x**7f_fff_ff_f");
    266         assert(ios.width() == 0);
    267     }
    268     {
    269         std::ios ios(0);
    270         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    271         showpos(ios);
    272         long long v = 1000;
    273         right(ios);
    274         ios.width(10);
    275         char str[50];
    276         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    277         std::string ex(str, iter.base());
    278         assert(ex == "***+1_00_0");
    279         assert(ios.width() == 0);
    280     }
    281     {
    282         std::ios ios(0);
    283         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    284         showpos(ios);
    285         long long v = 1000;
    286         left(ios);
    287         ios.width(10);
    288         char str[50];
    289         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    290         std::string ex(str, iter.base());
    291         assert(ex == "+1_00_0***");
    292         assert(ios.width() == 0);
    293     }
    294     {
    295         std::ios ios(0);
    296         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    297         showpos(ios);
    298         long long v = 1000;
    299         internal(ios);
    300         ios.width(10);
    301         char str[50];
    302         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    303         std::string ex(str, iter.base());
    304         assert(ex == "+***1_00_0");
    305         assert(ios.width() == 0);
    306     }
    307     {
    308         std::ios ios(0);
    309         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    310         long long v = -1000;
    311         right(ios);
    312         showpos(ios);
    313         ios.width(10);
    314         char str[50];
    315         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    316         std::string ex(str, iter.base());
    317         assert(ex == "***-1_00_0");
    318         assert(ios.width() == 0);
    319     }
    320     {
    321         std::ios ios(0);
    322         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    323         long long v = -1000;
    324         left(ios);
    325         ios.width(10);
    326         char str[50];
    327         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    328         std::string ex(str, iter.base());
    329         assert(ex == "-1_00_0***");
    330         assert(ios.width() == 0);
    331     }
    332     {
    333         std::ios ios(0);
    334         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    335         long long v = -1000;
    336         internal(ios);
    337         ios.width(10);
    338         char str[50];
    339         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    340         std::string ex(str, iter.base());
    341         assert(ex == "-***1_00_0");
    342         assert(ios.width() == 0);
    343     }
    344 }
    345