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, bool 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 string_type do_truename() const {return "yes";}
     40     virtual string_type do_falsename() const {return "no";}
     41 };
     42 
     43 int main()
     44 {
     45     const my_facet f(1);
     46     {
     47         std::ios ios(0);
     48         {
     49             bool v = false;
     50             char str[50];
     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             bool v = true;
     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     {
     64         std::ios ios(0);
     65         boolalpha(ios);
     66         {
     67             bool v = false;
     68             char str[50];
     69             output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     70             std::string ex(str, iter.base());
     71             assert(ex == "false");
     72         }
     73         {
     74             bool v = true;
     75             char str[50];
     76             output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     77             std::string ex(str, iter.base());
     78             assert(ex == "true");
     79         }
     80     }
     81     {
     82         std::ios ios(0);
     83         boolalpha(ios);
     84         ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
     85         {
     86             bool v = false;
     87             char str[50];
     88             output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     89             std::string ex(str, iter.base());
     90             assert(ex == "no");
     91         }
     92         {
     93             bool v = true;
     94             char str[50];
     95             output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
     96             std::string ex(str, iter.base());
     97             assert(ex == "yes");
     98         }
     99     }
    100 }
    101