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