1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class money_put<charT, OutputIterator> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iter_type put(iter_type s, bool intl, ios_base& f, char_type fill, 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// long double units) const; 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <ios> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <streambuf> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 2183e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2383e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "platform_support.h" // locale name macros 24c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::money_put<char, output_iterator<char*> > Fn; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facet 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public Fn 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facet(std::size_t refs = 0) 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : Fn(refs) {} 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::money_put<wchar_t, output_iterator<wchar_t*> > Fw; 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facetw 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public Fw 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facetw(std::size_t refs = 0) 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : Fw(refs) {} 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 48c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant std::string loc_name(LOCALE_en_US_UTF_8); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<char, false>(loc_name))); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<char, true>(loc_name))); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<wchar_t, false>(loc_name))); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<wchar_t, true>(loc_name))); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facet f(1); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // char, national 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0.00"); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-0.01"); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1,234,567.89"); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-1,234,567.89"); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "$0.00"); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-$0.01"); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "$1,234,567.89"); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-$1,234,567.89"); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-$1,234,567.89 "); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-$ 1,234,567.89"); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == " -$1,234,567.89"); 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // char, international 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0.00"); 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-0.01"); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1,234,567.89"); 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-1,234,567.89"); 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "USD 0.00"); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-USD 0.01"); 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "USD 1,234,567.89"); 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-USD 1,234,567.89"); 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-USD 1,234,567.89 "); 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "-USD 1,234,567.89"); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == " -USD 1,234,567.89"); 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facetw f(1); 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // wchar_t, national 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"0.00"); 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-0.01"); 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"1,234,567.89"); 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-1,234,567.89"); 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"$0.00"); 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-$0.01"); 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"$1,234,567.89"); 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-$1,234,567.89"); 346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-$1,234,567.89 "); 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-$ 1,234,567.89"); 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L" -$1,234,567.89"); 381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // wchar_t, international 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"0.00"); 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-0.01"); 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"1,234,567.89"); 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-1,234,567.89"); 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"USD 0.00"); 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-USD 0.01"); 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"USD 1,234,567.89"); 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-USD 1,234,567.89"); 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-USD 1,234,567.89 "); 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-USD 1,234,567.89"); 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L" -USD 1,234,567.89"); 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 493