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