1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class num_put<charT, OutputIterator>
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iter_type put(iter_type s, ios_base& iob, char_type fill, bool v) const;
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <ios>
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <streambuf>
2083e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h"
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::num_put<char, output_iterator<char*> > F;
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facet
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : public F
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic:
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    explicit my_facet(std::size_t refs = 0)
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : F(refs) {}
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_numpunct
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : public std::numpunct<char>
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic:
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    my_numpunct() : std::numpunct<char>() {}
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected:
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    virtual string_type do_truename() const {return "yes";}
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    virtual string_type do_falsename() const {return "no";}
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    const my_facet f(1);
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::ios ios(0);
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            bool v = false;
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            char str[50];
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            std::string ex(str, iter.base());
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(ex == "0");
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        }
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            bool v = true;
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            char str[50];
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            std::string ex(str, iter.base());
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(ex == "1");
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        }
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::ios ios(0);
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        boolalpha(ios);
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            bool v = false;
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            char str[50];
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            std::string ex(str, iter.base());
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(ex == "false");
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        }
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            bool v = true;
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            char str[50];
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            std::string ex(str, iter.base());
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(ex == "true");
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        }
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::ios ios(0);
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        boolalpha(ios);
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            bool v = false;
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            char str[50];
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            std::string ex(str, iter.base());
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(ex == "no");
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        }
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            bool v = true;
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            char str[50];
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            std::string ex(str, iter.base());
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(ex == "yes");
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        }
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
101