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