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