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