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