1*4684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
2*4684ddb6SLionel Sambuc //
3*4684ddb6SLionel Sambuc //                     The LLVM Compiler Infrastructure
4*4684ddb6SLionel Sambuc //
5*4684ddb6SLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
6*4684ddb6SLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
7*4684ddb6SLionel Sambuc //
8*4684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
9*4684ddb6SLionel Sambuc 
10*4684ddb6SLionel Sambuc // <locale>
11*4684ddb6SLionel Sambuc 
12*4684ddb6SLionel Sambuc // class money_put<charT, OutputIterator>
13*4684ddb6SLionel Sambuc 
14*4684ddb6SLionel Sambuc // iter_type put(iter_type s, bool intl, ios_base& f, char_type fill,
15*4684ddb6SLionel Sambuc //               const string_type& units) const;
16*4684ddb6SLionel Sambuc 
17*4684ddb6SLionel Sambuc #include <locale>
18*4684ddb6SLionel Sambuc #include <ios>
19*4684ddb6SLionel Sambuc #include <streambuf>
20*4684ddb6SLionel Sambuc #include <cassert>
21*4684ddb6SLionel Sambuc #include "test_iterators.h"
22*4684ddb6SLionel Sambuc 
23*4684ddb6SLionel Sambuc #include "platform_support.h" // locale name macros
24*4684ddb6SLionel Sambuc 
25*4684ddb6SLionel Sambuc typedef std::money_put<char, output_iterator<char*> > Fn;
26*4684ddb6SLionel Sambuc 
27*4684ddb6SLionel Sambuc class my_facet
28*4684ddb6SLionel Sambuc     : public Fn
29*4684ddb6SLionel Sambuc {
30*4684ddb6SLionel Sambuc public:
my_facet(std::size_t refs=0)31*4684ddb6SLionel Sambuc     explicit my_facet(std::size_t refs = 0)
32*4684ddb6SLionel Sambuc         : Fn(refs) {}
33*4684ddb6SLionel Sambuc };
34*4684ddb6SLionel Sambuc 
35*4684ddb6SLionel Sambuc typedef std::money_put<wchar_t, output_iterator<wchar_t*> > Fw;
36*4684ddb6SLionel Sambuc 
37*4684ddb6SLionel Sambuc class my_facetw
38*4684ddb6SLionel Sambuc     : public Fw
39*4684ddb6SLionel Sambuc {
40*4684ddb6SLionel Sambuc public:
my_facetw(std::size_t refs=0)41*4684ddb6SLionel Sambuc     explicit my_facetw(std::size_t refs = 0)
42*4684ddb6SLionel Sambuc         : Fw(refs) {}
43*4684ddb6SLionel Sambuc };
44*4684ddb6SLionel Sambuc 
main()45*4684ddb6SLionel Sambuc int main()
46*4684ddb6SLionel Sambuc {
47*4684ddb6SLionel Sambuc     std::ios ios(0);
48*4684ddb6SLionel Sambuc     std::string loc_name(LOCALE_en_US_UTF_8);
49*4684ddb6SLionel Sambuc     ios.imbue(std::locale(ios.getloc(),
50*4684ddb6SLionel Sambuc                           new std::moneypunct_byname<char, false>(loc_name)));
51*4684ddb6SLionel Sambuc     ios.imbue(std::locale(ios.getloc(),
52*4684ddb6SLionel Sambuc                           new std::moneypunct_byname<char, true>(loc_name)));
53*4684ddb6SLionel Sambuc     ios.imbue(std::locale(ios.getloc(),
54*4684ddb6SLionel Sambuc                           new std::moneypunct_byname<wchar_t, false>(loc_name)));
55*4684ddb6SLionel Sambuc     ios.imbue(std::locale(ios.getloc(),
56*4684ddb6SLionel Sambuc                           new std::moneypunct_byname<wchar_t, true>(loc_name)));
57*4684ddb6SLionel Sambuc {
58*4684ddb6SLionel Sambuc     const my_facet f(1);
59*4684ddb6SLionel Sambuc     // char, national
60*4684ddb6SLionel Sambuc     {   // zero
61*4684ddb6SLionel Sambuc         std::string v = "0";
62*4684ddb6SLionel Sambuc         char str[100];
63*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
64*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
65*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
66*4684ddb6SLionel Sambuc         assert(ex == "0.00");
67*4684ddb6SLionel Sambuc     }
68*4684ddb6SLionel Sambuc     {   // negative one
69*4684ddb6SLionel Sambuc         std::string v = "-1";
70*4684ddb6SLionel Sambuc         char str[100];
71*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
72*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
73*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
74*4684ddb6SLionel Sambuc         assert(ex == "-0.01");
75*4684ddb6SLionel Sambuc     }
76*4684ddb6SLionel Sambuc     {   // positive
77*4684ddb6SLionel Sambuc         std::string v = "123456789";
78*4684ddb6SLionel Sambuc         char str[100];
79*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
80*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
81*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
82*4684ddb6SLionel Sambuc         assert(ex == "1,234,567.89");
83*4684ddb6SLionel Sambuc     }
84*4684ddb6SLionel Sambuc     {   // negative
85*4684ddb6SLionel Sambuc         std::string v = "-123456789";
86*4684ddb6SLionel Sambuc         char str[100];
87*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
88*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
89*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
90*4684ddb6SLionel Sambuc         assert(ex == "-1,234,567.89");
91*4684ddb6SLionel Sambuc     }
92*4684ddb6SLionel Sambuc     {   // zero, showbase
93*4684ddb6SLionel Sambuc         std::string v = "0";
94*4684ddb6SLionel Sambuc         showbase(ios);
95*4684ddb6SLionel Sambuc         char str[100];
96*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
97*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
98*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
99*4684ddb6SLionel Sambuc         assert(ex == "$0.00");
100*4684ddb6SLionel Sambuc     }
101*4684ddb6SLionel Sambuc     {   // negative one, showbase
102*4684ddb6SLionel Sambuc         std::string v = "-1";
103*4684ddb6SLionel Sambuc         showbase(ios);
104*4684ddb6SLionel Sambuc         char str[100];
105*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
106*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
107*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
108*4684ddb6SLionel Sambuc         assert(ex == "-$0.01");
109*4684ddb6SLionel Sambuc     }
110*4684ddb6SLionel Sambuc     {   // positive, showbase
111*4684ddb6SLionel Sambuc         std::string v = "123456789";
112*4684ddb6SLionel Sambuc         showbase(ios);
113*4684ddb6SLionel Sambuc         char str[100];
114*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
115*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
116*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
117*4684ddb6SLionel Sambuc         assert(ex == "$1,234,567.89");
118*4684ddb6SLionel Sambuc     }
119*4684ddb6SLionel Sambuc     {   // negative, showbase
120*4684ddb6SLionel Sambuc         std::string v = "-123456789";
121*4684ddb6SLionel Sambuc         showbase(ios);
122*4684ddb6SLionel Sambuc         char str[100];
123*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
124*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
125*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
126*4684ddb6SLionel Sambuc         assert(ex == "-$1,234,567.89");
127*4684ddb6SLionel Sambuc     }
128*4684ddb6SLionel Sambuc     {   // negative, showbase, left
129*4684ddb6SLionel Sambuc         std::string v = "-123456789";
130*4684ddb6SLionel Sambuc         showbase(ios);
131*4684ddb6SLionel Sambuc         ios.width(20);
132*4684ddb6SLionel Sambuc         left(ios);
133*4684ddb6SLionel Sambuc         char str[100];
134*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
135*4684ddb6SLionel Sambuc                                             false, ios, ' ', v);
136*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
137*4684ddb6SLionel Sambuc         assert(ex == "-$1,234,567.89      ");
138*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
139*4684ddb6SLionel Sambuc     }
140*4684ddb6SLionel Sambuc     {   // negative, showbase, internal
141*4684ddb6SLionel Sambuc         std::string v = "-123456789";
142*4684ddb6SLionel Sambuc         showbase(ios);
143*4684ddb6SLionel Sambuc         ios.width(20);
144*4684ddb6SLionel Sambuc         internal(ios);
145*4684ddb6SLionel Sambuc         char str[100];
146*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
147*4684ddb6SLionel Sambuc                                             false, ios, ' ', v);
148*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
149*4684ddb6SLionel Sambuc         assert(ex == "-$      1,234,567.89");
150*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
151*4684ddb6SLionel Sambuc     }
152*4684ddb6SLionel Sambuc     {   // negative, showbase, right
153*4684ddb6SLionel Sambuc         std::string v = "-123456789";
154*4684ddb6SLionel Sambuc         showbase(ios);
155*4684ddb6SLionel Sambuc         ios.width(20);
156*4684ddb6SLionel Sambuc         right(ios);
157*4684ddb6SLionel Sambuc         char str[100];
158*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
159*4684ddb6SLionel Sambuc                                             false, ios, ' ', v);
160*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
161*4684ddb6SLionel Sambuc         assert(ex == "      -$1,234,567.89");
162*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
163*4684ddb6SLionel Sambuc     }
164*4684ddb6SLionel Sambuc 
165*4684ddb6SLionel Sambuc     // char, international
166*4684ddb6SLionel Sambuc     noshowbase(ios);
167*4684ddb6SLionel Sambuc     ios.unsetf(std::ios_base::adjustfield);
168*4684ddb6SLionel Sambuc     {   // zero
169*4684ddb6SLionel Sambuc         std::string v = "0";
170*4684ddb6SLionel Sambuc         char str[100];
171*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
172*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
173*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
174*4684ddb6SLionel Sambuc         assert(ex == "0.00");
175*4684ddb6SLionel Sambuc     }
176*4684ddb6SLionel Sambuc     {   // negative one
177*4684ddb6SLionel Sambuc         std::string v = "-1";
178*4684ddb6SLionel Sambuc         char str[100];
179*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
180*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
181*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
182*4684ddb6SLionel Sambuc         assert(ex == "-0.01");
183*4684ddb6SLionel Sambuc     }
184*4684ddb6SLionel Sambuc     {   // positive
185*4684ddb6SLionel Sambuc         std::string v = "123456789";
186*4684ddb6SLionel Sambuc         char str[100];
187*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
188*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
189*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
190*4684ddb6SLionel Sambuc         assert(ex == "1,234,567.89");
191*4684ddb6SLionel Sambuc     }
192*4684ddb6SLionel Sambuc     {   // negative
193*4684ddb6SLionel Sambuc         std::string v = "-123456789";
194*4684ddb6SLionel Sambuc         char str[100];
195*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
196*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
197*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
198*4684ddb6SLionel Sambuc         assert(ex == "-1,234,567.89");
199*4684ddb6SLionel Sambuc     }
200*4684ddb6SLionel Sambuc     {   // zero, showbase
201*4684ddb6SLionel Sambuc         std::string v = "0";
202*4684ddb6SLionel Sambuc         showbase(ios);
203*4684ddb6SLionel Sambuc         char str[100];
204*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
205*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
206*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
207*4684ddb6SLionel Sambuc         assert(ex == "USD 0.00");
208*4684ddb6SLionel Sambuc     }
209*4684ddb6SLionel Sambuc     {   // negative one, showbase
210*4684ddb6SLionel Sambuc         std::string v = "-1";
211*4684ddb6SLionel Sambuc         showbase(ios);
212*4684ddb6SLionel Sambuc         char str[100];
213*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
214*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
215*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
216*4684ddb6SLionel Sambuc         assert(ex == "-USD 0.01");
217*4684ddb6SLionel Sambuc     }
218*4684ddb6SLionel Sambuc     {   // positive, showbase
219*4684ddb6SLionel Sambuc         std::string v = "123456789";
220*4684ddb6SLionel Sambuc         showbase(ios);
221*4684ddb6SLionel Sambuc         char str[100];
222*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
223*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
224*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
225*4684ddb6SLionel Sambuc         assert(ex == "USD 1,234,567.89");
226*4684ddb6SLionel Sambuc     }
227*4684ddb6SLionel Sambuc     {   // negative, showbase
228*4684ddb6SLionel Sambuc         std::string v = "-123456789";
229*4684ddb6SLionel Sambuc         showbase(ios);
230*4684ddb6SLionel Sambuc         char str[100];
231*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
232*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
233*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
234*4684ddb6SLionel Sambuc         assert(ex == "-USD 1,234,567.89");
235*4684ddb6SLionel Sambuc     }
236*4684ddb6SLionel Sambuc     {   // negative, showbase, left
237*4684ddb6SLionel Sambuc         std::string v = "-123456789";
238*4684ddb6SLionel Sambuc         showbase(ios);
239*4684ddb6SLionel Sambuc         ios.width(20);
240*4684ddb6SLionel Sambuc         left(ios);
241*4684ddb6SLionel Sambuc         char str[100];
242*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
243*4684ddb6SLionel Sambuc                                             true, ios, ' ', v);
244*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
245*4684ddb6SLionel Sambuc         assert(ex == "-USD 1,234,567.89   ");
246*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
247*4684ddb6SLionel Sambuc     }
248*4684ddb6SLionel Sambuc     {   // negative, showbase, internal
249*4684ddb6SLionel Sambuc         std::string v = "-123456789";
250*4684ddb6SLionel Sambuc         showbase(ios);
251*4684ddb6SLionel Sambuc         ios.width(20);
252*4684ddb6SLionel Sambuc         internal(ios);
253*4684ddb6SLionel Sambuc         char str[100];
254*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
255*4684ddb6SLionel Sambuc                                             true, ios, ' ', v);
256*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
257*4684ddb6SLionel Sambuc         assert(ex == "-USD    1,234,567.89");
258*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
259*4684ddb6SLionel Sambuc     }
260*4684ddb6SLionel Sambuc     {   // negative, showbase, right
261*4684ddb6SLionel Sambuc         std::string v = "-123456789";
262*4684ddb6SLionel Sambuc         showbase(ios);
263*4684ddb6SLionel Sambuc         ios.width(20);
264*4684ddb6SLionel Sambuc         right(ios);
265*4684ddb6SLionel Sambuc         char str[100];
266*4684ddb6SLionel Sambuc         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
267*4684ddb6SLionel Sambuc                                             true, ios, ' ', v);
268*4684ddb6SLionel Sambuc         std::string ex(str, iter.base());
269*4684ddb6SLionel Sambuc         assert(ex == "   -USD 1,234,567.89");
270*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
271*4684ddb6SLionel Sambuc     }
272*4684ddb6SLionel Sambuc }
273*4684ddb6SLionel Sambuc {
274*4684ddb6SLionel Sambuc 
275*4684ddb6SLionel Sambuc     const my_facetw f(1);
276*4684ddb6SLionel Sambuc     // wchar_t, national
277*4684ddb6SLionel Sambuc     noshowbase(ios);
278*4684ddb6SLionel Sambuc     ios.unsetf(std::ios_base::adjustfield);
279*4684ddb6SLionel Sambuc     {   // zero
280*4684ddb6SLionel Sambuc         std::wstring v = L"0";
281*4684ddb6SLionel Sambuc         wchar_t str[100];
282*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
283*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
284*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
285*4684ddb6SLionel Sambuc         assert(ex == L"0.00");
286*4684ddb6SLionel Sambuc     }
287*4684ddb6SLionel Sambuc     {   // negative one
288*4684ddb6SLionel Sambuc         std::wstring v = L"-1";
289*4684ddb6SLionel Sambuc         wchar_t str[100];
290*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
291*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
292*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
293*4684ddb6SLionel Sambuc         assert(ex == L"-0.01");
294*4684ddb6SLionel Sambuc     }
295*4684ddb6SLionel Sambuc     {   // positive
296*4684ddb6SLionel Sambuc         std::wstring v = L"123456789";
297*4684ddb6SLionel Sambuc         wchar_t str[100];
298*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
299*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
300*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
301*4684ddb6SLionel Sambuc         assert(ex == L"1,234,567.89");
302*4684ddb6SLionel Sambuc     }
303*4684ddb6SLionel Sambuc     {   // negative
304*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
305*4684ddb6SLionel Sambuc         wchar_t str[100];
306*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
307*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
308*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
309*4684ddb6SLionel Sambuc         assert(ex == L"-1,234,567.89");
310*4684ddb6SLionel Sambuc     }
311*4684ddb6SLionel Sambuc     {   // zero, showbase
312*4684ddb6SLionel Sambuc         std::wstring v = L"0";
313*4684ddb6SLionel Sambuc         showbase(ios);
314*4684ddb6SLionel Sambuc         wchar_t str[100];
315*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
316*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
317*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
318*4684ddb6SLionel Sambuc         assert(ex == L"$0.00");
319*4684ddb6SLionel Sambuc     }
320*4684ddb6SLionel Sambuc     {   // negative one, showbase
321*4684ddb6SLionel Sambuc         std::wstring v = L"-1";
322*4684ddb6SLionel Sambuc         showbase(ios);
323*4684ddb6SLionel Sambuc         wchar_t str[100];
324*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
325*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
326*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
327*4684ddb6SLionel Sambuc         assert(ex == L"-$0.01");
328*4684ddb6SLionel Sambuc     }
329*4684ddb6SLionel Sambuc     {   // positive, showbase
330*4684ddb6SLionel Sambuc         std::wstring v = L"123456789";
331*4684ddb6SLionel Sambuc         showbase(ios);
332*4684ddb6SLionel Sambuc         wchar_t str[100];
333*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
334*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
335*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
336*4684ddb6SLionel Sambuc         assert(ex == L"$1,234,567.89");
337*4684ddb6SLionel Sambuc     }
338*4684ddb6SLionel Sambuc     {   // negative, showbase
339*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
340*4684ddb6SLionel Sambuc         showbase(ios);
341*4684ddb6SLionel Sambuc         wchar_t str[100];
342*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
343*4684ddb6SLionel Sambuc                                             false, ios, '*', v);
344*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
345*4684ddb6SLionel Sambuc         assert(ex == L"-$1,234,567.89");
346*4684ddb6SLionel Sambuc     }
347*4684ddb6SLionel Sambuc     {   // negative, showbase, left
348*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
349*4684ddb6SLionel Sambuc         showbase(ios);
350*4684ddb6SLionel Sambuc         ios.width(20);
351*4684ddb6SLionel Sambuc         left(ios);
352*4684ddb6SLionel Sambuc         wchar_t str[100];
353*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
354*4684ddb6SLionel Sambuc                                             false, ios, ' ', v);
355*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
356*4684ddb6SLionel Sambuc         assert(ex == L"-$1,234,567.89      ");
357*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
358*4684ddb6SLionel Sambuc     }
359*4684ddb6SLionel Sambuc     {   // negative, showbase, internal
360*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
361*4684ddb6SLionel Sambuc         showbase(ios);
362*4684ddb6SLionel Sambuc         ios.width(20);
363*4684ddb6SLionel Sambuc         internal(ios);
364*4684ddb6SLionel Sambuc         wchar_t str[100];
365*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
366*4684ddb6SLionel Sambuc                                             false, ios, ' ', v);
367*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
368*4684ddb6SLionel Sambuc         assert(ex == L"-$      1,234,567.89");
369*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
370*4684ddb6SLionel Sambuc     }
371*4684ddb6SLionel Sambuc     {   // negative, showbase, right
372*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
373*4684ddb6SLionel Sambuc         showbase(ios);
374*4684ddb6SLionel Sambuc         ios.width(20);
375*4684ddb6SLionel Sambuc         right(ios);
376*4684ddb6SLionel Sambuc         wchar_t str[100];
377*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
378*4684ddb6SLionel Sambuc                                             false, ios, ' ', v);
379*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
380*4684ddb6SLionel Sambuc         assert(ex == L"      -$1,234,567.89");
381*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
382*4684ddb6SLionel Sambuc     }
383*4684ddb6SLionel Sambuc 
384*4684ddb6SLionel Sambuc     // wchar_t, international
385*4684ddb6SLionel Sambuc     noshowbase(ios);
386*4684ddb6SLionel Sambuc     ios.unsetf(std::ios_base::adjustfield);
387*4684ddb6SLionel Sambuc     {   // zero
388*4684ddb6SLionel Sambuc         std::wstring v = L"0";
389*4684ddb6SLionel Sambuc         wchar_t str[100];
390*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
391*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
392*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
393*4684ddb6SLionel Sambuc         assert(ex == L"0.00");
394*4684ddb6SLionel Sambuc     }
395*4684ddb6SLionel Sambuc     {   // negative one
396*4684ddb6SLionel Sambuc         std::wstring v = L"-1";
397*4684ddb6SLionel Sambuc         wchar_t str[100];
398*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
399*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
400*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
401*4684ddb6SLionel Sambuc         assert(ex == L"-0.01");
402*4684ddb6SLionel Sambuc     }
403*4684ddb6SLionel Sambuc     {   // positive
404*4684ddb6SLionel Sambuc         std::wstring v = L"123456789";
405*4684ddb6SLionel Sambuc         wchar_t str[100];
406*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
407*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
408*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
409*4684ddb6SLionel Sambuc         assert(ex == L"1,234,567.89");
410*4684ddb6SLionel Sambuc     }
411*4684ddb6SLionel Sambuc     {   // negative
412*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
413*4684ddb6SLionel Sambuc         wchar_t str[100];
414*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
415*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
416*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
417*4684ddb6SLionel Sambuc         assert(ex == L"-1,234,567.89");
418*4684ddb6SLionel Sambuc     }
419*4684ddb6SLionel Sambuc     {   // zero, showbase
420*4684ddb6SLionel Sambuc         std::wstring v = L"0";
421*4684ddb6SLionel Sambuc         showbase(ios);
422*4684ddb6SLionel Sambuc         wchar_t str[100];
423*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
424*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
425*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
426*4684ddb6SLionel Sambuc         assert(ex == L"USD 0.00");
427*4684ddb6SLionel Sambuc     }
428*4684ddb6SLionel Sambuc     {   // negative one, showbase
429*4684ddb6SLionel Sambuc         std::wstring v = L"-1";
430*4684ddb6SLionel Sambuc         showbase(ios);
431*4684ddb6SLionel Sambuc         wchar_t str[100];
432*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
433*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
434*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
435*4684ddb6SLionel Sambuc         assert(ex == L"-USD 0.01");
436*4684ddb6SLionel Sambuc     }
437*4684ddb6SLionel Sambuc     {   // positive, showbase
438*4684ddb6SLionel Sambuc         std::wstring v = L"123456789";
439*4684ddb6SLionel Sambuc         showbase(ios);
440*4684ddb6SLionel Sambuc         wchar_t str[100];
441*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
442*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
443*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
444*4684ddb6SLionel Sambuc         assert(ex == L"USD 1,234,567.89");
445*4684ddb6SLionel Sambuc     }
446*4684ddb6SLionel Sambuc     {   // negative, showbase
447*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
448*4684ddb6SLionel Sambuc         showbase(ios);
449*4684ddb6SLionel Sambuc         wchar_t str[100];
450*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
451*4684ddb6SLionel Sambuc                                             true, ios, '*', v);
452*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
453*4684ddb6SLionel Sambuc         assert(ex == L"-USD 1,234,567.89");
454*4684ddb6SLionel Sambuc     }
455*4684ddb6SLionel Sambuc     {   // negative, showbase, left
456*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
457*4684ddb6SLionel Sambuc         showbase(ios);
458*4684ddb6SLionel Sambuc         ios.width(20);
459*4684ddb6SLionel Sambuc         left(ios);
460*4684ddb6SLionel Sambuc         wchar_t str[100];
461*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
462*4684ddb6SLionel Sambuc                                             true, ios, ' ', v);
463*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
464*4684ddb6SLionel Sambuc         assert(ex == L"-USD 1,234,567.89   ");
465*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
466*4684ddb6SLionel Sambuc     }
467*4684ddb6SLionel Sambuc     {   // negative, showbase, internal
468*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
469*4684ddb6SLionel Sambuc         showbase(ios);
470*4684ddb6SLionel Sambuc         ios.width(20);
471*4684ddb6SLionel Sambuc         internal(ios);
472*4684ddb6SLionel Sambuc         wchar_t str[100];
473*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
474*4684ddb6SLionel Sambuc                                             true, ios, ' ', v);
475*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
476*4684ddb6SLionel Sambuc         assert(ex == L"-USD    1,234,567.89");
477*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
478*4684ddb6SLionel Sambuc     }
479*4684ddb6SLionel Sambuc     {   // negative, showbase, right
480*4684ddb6SLionel Sambuc         std::wstring v = L"-123456789";
481*4684ddb6SLionel Sambuc         showbase(ios);
482*4684ddb6SLionel Sambuc         ios.width(20);
483*4684ddb6SLionel Sambuc         right(ios);
484*4684ddb6SLionel Sambuc         wchar_t str[100];
485*4684ddb6SLionel Sambuc         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
486*4684ddb6SLionel Sambuc                                             true, ios, ' ', v);
487*4684ddb6SLionel Sambuc         std::wstring ex(str, iter.base());
488*4684ddb6SLionel Sambuc         assert(ex == L"   -USD 1,234,567.89");
489*4684ddb6SLionel Sambuc         assert(ios.width() == 0);
490*4684ddb6SLionel Sambuc     }
491*4684ddb6SLionel Sambuc }
492*4684ddb6SLionel Sambuc }
493