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 "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:
my_facet(std::size_t refs=0)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:
my_numpunct()36 my_numpunct() : std::numpunct<char>() {}
37
38 protected:
do_thousands_sep() const39 virtual char_type do_thousands_sep() const {return '_';}
do_grouping() const40 virtual std::string do_grouping() const {return std::string("\1\2\3");}
41 };
42
main()43 int 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