111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//                     The LLVM Compiler Infrastructure
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details.
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <locale>
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// class money_put<charT, OutputIterator>
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// iter_type put(iter_type s, bool intl, ios_base& f, char_type fill,
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//               const string_type& units) const;
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// REQUIRES: locale.en_US.UTF-8
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <locale>
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <ios>
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <streambuf>
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert>
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "test_iterators.h"
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "platform_support.h" // locale name macros
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef std::money_put<char, output_iterator<char*> > Fn;
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass my_facet
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    : public Fn
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic:
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    explicit my_facet(std::size_t refs = 0)
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        : Fn(refs) {}
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef std::money_put<wchar_t, output_iterator<wchar_t*> > Fw;
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass my_facetw
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    : public Fw
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic:
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    explicit my_facetw(std::size_t refs = 0)
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        : Fw(refs) {}
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main()
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    std::ios ios(0);
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    std::string loc_name(LOCALE_en_US_UTF_8);
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.imbue(std::locale(ios.getloc(),
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                          new std::moneypunct_byname<char, false>(loc_name)));
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.imbue(std::locale(ios.getloc(),
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                          new std::moneypunct_byname<char, true>(loc_name)));
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.imbue(std::locale(ios.getloc(),
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                          new std::moneypunct_byname<wchar_t, false>(loc_name)));
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.imbue(std::locale(ios.getloc(),
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                          new std::moneypunct_byname<wchar_t, true>(loc_name)));
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const my_facet f(1);
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    // char, national
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "0";
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "0.00");
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-1";
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-0.01");
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "123456789";
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "1,234,567.89");
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-1,234,567.89");
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero, showbase
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "0";
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "$0.00");
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one, showbase
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-1";
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-$0.01");
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive, showbase
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "123456789";
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "$1,234,567.89");
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-$1,234,567.89");
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, left
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        left(ios);
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, ' ', v);
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-$1,234,567.89      ");
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, internal
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        internal(ios);
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, ' ', v);
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-$      1,234,567.89");
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, right
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        right(ios);
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, ' ', v);
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "      -$1,234,567.89");
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    // char, international
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    noshowbase(ios);
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.unsetf(std::ios_base::adjustfield);
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "0";
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "0.00");
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-1";
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-0.01");
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive
18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "123456789";
18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "1,234,567.89");
19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative
19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-1,234,567.89");
20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero, showbase
20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "0";
20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "USD 0.00");
21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one, showbase
21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-1";
21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-USD 0.01");
21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive, showbase
22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "123456789";
22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "USD 1,234,567.89");
22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase
23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-USD 1,234,567.89");
23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, left
23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        left(ios);
24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, ' ', v);
24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-USD 1,234,567.89   ");
24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, internal
25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        internal(ios);
25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, ' ', v);
25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "-USD    1,234,567.89");
26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, right
26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string v = "-123456789";
26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        right(ios);
26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        char str[100];
26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<char*> iter = f.put(output_iterator<char*>(str),
26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, ' ', v);
27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::string ex(str, iter.base());
27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == "   -USD 1,234,567.89");
27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    const my_facetw f(1);
27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    // wchar_t, national
27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    noshowbase(ios);
28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.unsetf(std::ios_base::adjustfield);
28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero
28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"0";
28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"0.00");
28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one
29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-1";
29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-0.01");
29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive
29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"123456789";
29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"1,234,567.89");
30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative
30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-1,234,567.89");
31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero, showbase
31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"0";
31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"$0.00");
32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one, showbase
32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-1";
32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-$0.01");
33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive, showbase
33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"123456789";
33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"$1,234,567.89");
33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase
34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, '*', v);
34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-$1,234,567.89");
34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, left
35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        left(ios);
35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, ' ', v);
35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-$1,234,567.89      ");
35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, internal
36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        internal(ios);
36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, ' ', v);
36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-$      1,234,567.89");
37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, right
37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        right(ios);
37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            false, ios, ' ', v);
38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"      -$1,234,567.89");
38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    // wchar_t, international
38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    noshowbase(ios);
38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ios.unsetf(std::ios_base::adjustfield);
38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero
39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"0";
39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"0.00");
39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one
39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-1";
39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-0.01");
40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive
40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"123456789";
40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"1,234,567.89");
41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative
41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-1,234,567.89");
42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // zero, showbase
42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"0";
42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"USD 0.00");
42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative one, showbase
43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-1";
43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-USD 0.01");
43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // positive, showbase
44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"123456789";
44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"USD 1,234,567.89");
44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase
44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, '*', v);
45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-USD 1,234,567.89");
45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, left
45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        left(ios);
46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, ' ', v);
46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-USD 1,234,567.89   ");
46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, internal
47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        internal(ios);
47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, ' ', v);
47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"-USD    1,234,567.89");
47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {   // negative, showbase, right
48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring v = L"-123456789";
48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        showbase(ios);
48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        ios.width(20);
48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        right(ios);
48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        wchar_t str[100];
48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                            true, ios, ' ', v);
48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        std::wstring ex(str, iter.base());
49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ex == L"   -USD 1,234,567.89");
49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert(ios.width() == 0);
49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
495