put_unsigned_long.pass.cpp revision 239e341c94184e2ed2357f2e054c84fbb1fbed2a
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, unsigned long v) const;
15
16#include <locale>
17#include <ios>
18#include <cassert>
19#include <streambuf>
20#include "../../../../../iterators.h"
21
22typedef std::num_put<char, output_iterator<char*> > F;
23
24class my_facet
25    : public F
26{
27public:
28    explicit my_facet(std::size_t refs = 0)
29        : F(refs) {}
30};
31
32class my_numpunct
33    : public std::numpunct<char>
34{
35public:
36    my_numpunct() : std::numpunct<char>() {}
37
38protected:
39    virtual char_type do_thousands_sep() const {return '_';}
40    virtual std::string do_grouping() const {return std::string("\1\2\3");}
41};
42
43int main()
44{
45    const my_facet f(1);
46    {
47        std::ios ios(0);
48        unsigned 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        unsigned 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        unsigned 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 == (sizeof(unsigned long) == 4 ? "4294967295" : "18446744073709551615"));
72    }
73    {
74        std::ios ios(0);
75        unsigned 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 == (sizeof(unsigned long) == 4 ? "4294966296" : "18446744073709550616"));
81    }
82    {
83        std::ios ios(0);
84        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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        unsigned 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 == (sizeof(unsigned long) == 4 ? "4_294_966_29_6"
343                                                 : "18_446_744_073_709_550_61_6"));
344        assert(ios.width() == 0);
345    }
346    {
347        std::ios ios(0);
348        ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
349        unsigned long v = -1000;
350        left(ios);
351        ios.width(10);
352        char str[50];
353        std::ios_base::iostate err = ios.goodbit;
354        output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
355        std::string ex(str, iter.base());
356        assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6"
357                                                 : "18_446_744_073_709_550_61_6"));
358        assert(ios.width() == 0);
359    }
360    {
361        std::ios ios(0);
362        ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
363        unsigned long v = -1000;
364        internal(ios);
365        ios.width(10);
366        char str[50];
367        std::ios_base::iostate err = ios.goodbit;
368        output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
369        std::string ex(str, iter.base());
370        assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6"
371                                                 : "18_446_744_073_709_550_61_6"));
372        assert(ios.width() == 0);
373    }
374}
375