1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // class num_put<charT, OutputIterator>
14 // iter_type put(iter_type s, ios_base& iob, char_type fill, unsigned long v) const;
20 #include "test_iterators.h"
22 typedef std::num_put<char, output_iterator<char*> > F;
28 explicit my_facet(std::size_t refs = 0)
33 : public std::numpunct<char>
36 my_numpunct() : std::numpunct<char>() {}
39 virtual char_type do_thousands_sep() const {return '_';}
40 virtual std::string do_grouping() const {return std::string("\1\2\3");}
50 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
51 std::string ex(str, iter.base());
58 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
59 std::string ex(str, iter.base());
64 unsigned long v = static_cast<unsigned long>(-1);
66 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
67 std::string ex(str, iter.base());
68 assert(ex == (sizeof(unsigned long) == 4 ? "4294967295" : "18446744073709551615"));
72 unsigned long v = static_cast<unsigned long>(-1000);
74 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
75 std::string ex(str, iter.base());
76 assert(ex == (sizeof(unsigned long) == 4 ? "4294966296" : "18446744073709550616"));
80 unsigned long v = 1000;
82 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
83 std::string ex(str, iter.base());
89 unsigned long v = 1000;
91 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
92 std::string ex(str, iter.base());
98 unsigned long v = 1000;
100 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
101 std::string ex(str, iter.base());
102 assert(ex == "1750");
108 unsigned long v = 1000;
110 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
111 std::string ex(str, iter.base());
112 assert(ex == "01750");
117 unsigned long v = 1000;
119 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
120 std::string ex(str, iter.base());
127 unsigned long v = 1000;
129 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
130 std::string ex(str, iter.base());
131 assert(ex == "0x3e8");
138 unsigned long v = 1000;
140 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
141 std::string ex(str, iter.base());
142 assert(ex == "0X3E8");
146 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
150 unsigned long v = 1000;
152 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
153 std::string ex(str, iter.base());
154 assert(ex == "0X3E_8");
158 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
161 unsigned long v = 2147483647;
163 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
164 std::string ex(str, iter.base());
165 assert(ex == "0x7f_fff_ff_f");
169 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
171 unsigned long v = 0123467;
173 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
174 std::string ex(str, iter.base());
175 assert(ex == "123_46_7");
179 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
182 unsigned long v = 0123467;
184 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
185 std::string ex(str, iter.base());
186 assert(ex == "0_123_46_7");
190 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
195 unsigned long v = 0123467;
197 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
198 std::string ex(str, iter.base());
199 assert(ex == "*****0_123_46_7");
203 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
208 unsigned long v = 0123467;
210 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
211 std::string ex(str, iter.base());
212 assert(ex == "0_123_46_7*****");
216 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
221 unsigned long v = 0123467;
223 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
224 std::string ex(str, iter.base());
225 assert(ex == "*****0_123_46_7");
226 assert(ios.width() == 0);
230 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
235 unsigned long v = 2147483647;
237 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
238 std::string ex(str, iter.base());
239 assert(ex == "**0x7f_fff_ff_f");
243 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
248 unsigned long v = 2147483647;
250 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
251 std::string ex(str, iter.base());
252 assert(ex == "0x7f_fff_ff_f**");
256 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
261 unsigned long v = 2147483647;
263 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
264 std::string ex(str, iter.base());
265 assert(ex == "0x**7f_fff_ff_f");
266 assert(ios.width() == 0);
270 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
272 unsigned long v = 1000;
276 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
277 std::string ex(str, iter.base());
278 assert(ex == "****1_00_0");
279 assert(ios.width() == 0);
283 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
285 unsigned long v = 1000;
289 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
290 std::string ex(str, iter.base());
291 assert(ex == "1_00_0****");
292 assert(ios.width() == 0);
296 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
298 unsigned long v = 1000;
302 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
303 std::string ex(str, iter.base());
304 assert(ex == "****1_00_0");
305 assert(ios.width() == 0);
309 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
310 unsigned long v = static_cast<unsigned long>(-1000);
315 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
316 std::string ex(str, iter.base());
317 assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6"
318 : "18_446_744_073_709_550_61_6"));
319 assert(ios.width() == 0);
323 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
324 unsigned long v = static_cast<unsigned long>(-1000);
328 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
329 std::string ex(str, iter.base());
330 assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6"
331 : "18_446_744_073_709_550_61_6"));
332 assert(ios.width() == 0);
336 ios.imbue(std::locale(std::locale::classic(), new my_numpunct));
337 unsigned long v = static_cast<unsigned long>(-1000);
341 output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v);
342 std::string ex(str, iter.base());
343 assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6"
344 : "18_446_744_073_709_550_61_6"));
345 assert(ios.width() == 0);