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 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 v = 0;
     49         char str[50];
     50         std::ios_base::iostate err = ios.goodbit;
     51         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     52         std::string ex(str, iter.base());
     53         assert(ex == "0");
     54     }
     55     {
     56         std::ios ios(0);
     57         long v = 1;
     58         char str[50];
     59         std::ios_base::iostate err = ios.goodbit;
     60         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     61         std::string ex(str, iter.base());
     62         assert(ex == "1");
     63     }
     64     {
     65         std::ios ios(0);
     66         long v = -1;
     67         char str[50];
     68         std::ios_base::iostate err = ios.goodbit;
     69         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     70         std::string ex(str, iter.base());
     71         assert(ex == "-1");
     72     }
     73     {
     74         std::ios ios(0);
     75         long v = -1000;
     76         char str[50];
     77         std::ios_base::iostate err = ios.goodbit;
     78         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     79         std::string ex(str, iter.base());
     80         assert(ex == "-1000");
     81     }
     82     {
     83         std::ios ios(0);
     84         long v = 1000;
     85         char str[50];
     86         std::ios_base::iostate err = ios.goodbit;
     87         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     88         std::string ex(str, iter.base());
     89         assert(ex == "1000");
     90     }
     91     {
     92         std::ios ios(0);
     93         showpos(ios);
     94         long v = 1000;
     95         char str[50];
     96         std::ios_base::iostate err = ios.goodbit;
     97         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     98         std::string ex(str, iter.base());
     99         assert(ex == "+1000");
    100     }
    101     {
    102         std::ios ios(0);
    103         oct(ios);
    104         long v = 1000;
    105         char str[50];
    106         std::ios_base::iostate err = ios.goodbit;
    107         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    108         std::string ex(str, iter.base());
    109         assert(ex == "1750");
    110     }
    111     {
    112         std::ios ios(0);
    113         oct(ios);
    114         showbase(ios);
    115         long v = 1000;
    116         char str[50];
    117         std::ios_base::iostate err = ios.goodbit;
    118         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    119         std::string ex(str, iter.base());
    120         assert(ex == "01750");
    121     }
    122     {
    123         std::ios ios(0);
    124         hex(ios);
    125         long v = 1000;
    126         char str[50];
    127         std::ios_base::iostate err = ios.goodbit;
    128         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    129         std::string ex(str, iter.base());
    130         assert(ex == "3e8");
    131     }
    132     {
    133         std::ios ios(0);
    134         hex(ios);
    135         showbase(ios);
    136         long v = 1000;
    137         char str[50];
    138         std::ios_base::iostate err = ios.goodbit;
    139         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    140         std::string ex(str, iter.base());
    141         assert(ex == "0x3e8");
    142     }
    143     {
    144         std::ios ios(0);
    145         hex(ios);
    146         showbase(ios);
    147         uppercase(ios);
    148         long v = 1000;
    149         char str[50];
    150         std::ios_base::iostate err = ios.goodbit;
    151         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    152         std::string ex(str, iter.base());
    153         assert(ex == "0X3E8");
    154     }
    155     {
    156         std::ios ios(0);
    157         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    158         hex(ios);
    159         showbase(ios);
    160         uppercase(ios);
    161         long v = 1000;
    162         char str[50];
    163         std::ios_base::iostate err = ios.goodbit;
    164         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    165         std::string ex(str, iter.base());
    166         assert(ex == "0X3E_8");
    167     }
    168     {
    169         std::ios ios(0);
    170         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    171         hex(ios);
    172         showbase(ios);
    173         long v = 2147483647;
    174         char str[50];
    175         std::ios_base::iostate err = ios.goodbit;
    176         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    177         std::string ex(str, iter.base());
    178         assert(ex == "0x7f_fff_ff_f");
    179     }
    180     {
    181         std::ios ios(0);
    182         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    183         oct(ios);
    184         long v = 0123467;
    185         char str[50];
    186         std::ios_base::iostate err = ios.goodbit;
    187         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    188         std::string ex(str, iter.base());
    189         assert(ex == "123_46_7");
    190     }
    191     {
    192         std::ios ios(0);
    193         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    194         oct(ios);
    195         showbase(ios);
    196         long v = 0123467;
    197         char str[50];
    198         std::ios_base::iostate err = ios.goodbit;
    199         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    200         std::string ex(str, iter.base());
    201         assert(ex == "0_123_46_7");
    202     }
    203     {
    204         std::ios ios(0);
    205         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    206         oct(ios);
    207         showbase(ios);
    208         right(ios);
    209         ios.width(15);
    210         long v = 0123467;
    211         char str[50];
    212         std::ios_base::iostate err = ios.goodbit;
    213         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    214         std::string ex(str, iter.base());
    215         assert(ex == "*****0_123_46_7");
    216     }
    217     {
    218         std::ios ios(0);
    219         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    220         oct(ios);
    221         showbase(ios);
    222         left(ios);
    223         ios.width(15);
    224         long v = 0123467;
    225         char str[50];
    226         std::ios_base::iostate err = ios.goodbit;
    227         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    228         std::string ex(str, iter.base());
    229         assert(ex == "0_123_46_7*****");
    230     }
    231     {
    232         std::ios ios(0);
    233         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    234         oct(ios);
    235         showbase(ios);
    236         internal(ios);
    237         ios.width(15);
    238         long v = 0123467;
    239         char str[50];
    240         std::ios_base::iostate err = ios.goodbit;
    241         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    242         std::string ex(str, iter.base());
    243         assert(ex == "*****0_123_46_7");
    244         assert(ios.width() == 0);
    245     }
    246     {
    247         std::ios ios(0);
    248         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    249         hex(ios);
    250         showbase(ios);
    251         right(ios);
    252         ios.width(15);
    253         long v = 2147483647;
    254         char str[50];
    255         std::ios_base::iostate err = ios.goodbit;
    256         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    257         std::string ex(str, iter.base());
    258         assert(ex == "**0x7f_fff_ff_f");
    259     }
    260     {
    261         std::ios ios(0);
    262         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    263         hex(ios);
    264         showbase(ios);
    265         left(ios);
    266         ios.width(15);
    267         long v = 2147483647;
    268         char str[50];
    269         std::ios_base::iostate err = ios.goodbit;
    270         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    271         std::string ex(str, iter.base());
    272         assert(ex == "0x7f_fff_ff_f**");
    273     }
    274     {
    275         std::ios ios(0);
    276         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    277         hex(ios);
    278         showbase(ios);
    279         internal(ios);
    280         ios.width(15);
    281         long v = 2147483647;
    282         char str[50];
    283         std::ios_base::iostate err = ios.goodbit;
    284         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    285         std::string ex(str, iter.base());
    286         assert(ex == "0x**7f_fff_ff_f");
    287         assert(ios.width() == 0);
    288     }
    289     {
    290         std::ios ios(0);
    291         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    292         showpos(ios);
    293         long v = 1000;
    294         right(ios);
    295         ios.width(10);
    296         char str[50];
    297         std::ios_base::iostate err = ios.goodbit;
    298         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    299         std::string ex(str, iter.base());
    300         assert(ex == "***+1_00_0");
    301         assert(ios.width() == 0);
    302     }
    303     {
    304         std::ios ios(0);
    305         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    306         showpos(ios);
    307         long v = 1000;
    308         left(ios);
    309         ios.width(10);
    310         char str[50];
    311         std::ios_base::iostate err = ios.goodbit;
    312         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    313         std::string ex(str, iter.base());
    314         assert(ex == "+1_00_0***");
    315         assert(ios.width() == 0);
    316     }
    317     {
    318         std::ios ios(0);
    319         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    320         showpos(ios);
    321         long v = 1000;
    322         internal(ios);
    323         ios.width(10);
    324         char str[50];
    325         std::ios_base::iostate err = ios.goodbit;
    326         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    327         std::string ex(str, iter.base());
    328         assert(ex == "+***1_00_0");
    329         assert(ios.width() == 0);
    330     }
    331     {
    332         std::ios ios(0);
    333         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    334         long v = -1000;
    335         right(ios);
    336         showpos(ios);
    337         ios.width(10);
    338         char str[50];
    339         std::ios_base::iostate err = ios.goodbit;
    340         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    341         std::string ex(str, iter.base());
    342         assert(ex == "***-1_00_0");
    343         assert(ios.width() == 0);
    344     }
    345     {
    346         std::ios ios(0);
    347         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    348         long v = -1000;
    349         left(ios);
    350         ios.width(10);
    351         char str[50];
    352         std::ios_base::iostate err = ios.goodbit;
    353         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    354         std::string ex(str, iter.base());
    355         assert(ex == "-1_00_0***");
    356         assert(ios.width() == 0);
    357     }
    358     {
    359         std::ios ios(0);
    360         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
    361         long v = -1000;
    362         internal(ios);
    363         ios.width(10);
    364         char str[50];
    365         std::ios_base::iostate err = ios.goodbit;
    366         output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
    367         std::string ex(str, iter.base());
    368         assert(ex == "-***1_00_0");
    369         assert(ios.width() == 0);
    370     }
    371 }
    372