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