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_zh_CN_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 == "\xEF\xBF\xA5""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 == "\xEF\xBF\xA5""-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 == "\xEF\xBF\xA5""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 == "\xEF\xBF\xA5""-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 == "\xEF\xBF\xA5""-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 == "\xEF\xBF\xA5""- 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 == " \xEF\xBF\xA5""-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 == "CNY 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 == "CNY -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 == "CNY 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 == "CNY -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 == "CNY -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 == "CNY - 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 == " CNY -1,234,567.89"); 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facetw f(1); 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // wchar_t, national 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"0.00"); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-0.01"); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"1,234,567.89"); 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-1,234,567.89"); 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"\xFFE5""0.00"); 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"\xFFE5""-0.01"); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"\xFFE5""1,234,567.89"); 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"\xFFE5""-1,234,567.89"); 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"\xFFE5""-1,234,567.89 "); 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"\xFFE5""- 1,234,567.89"); 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L" \xFFE5""-1,234,567.89"); 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // wchar_t, international 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"0.00"); 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-0.01"); 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"1,234,567.89"); 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"-1,234,567.89"); 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"CNY 0.00"); 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"CNY -0.01"); 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"CNY 1,234,567.89"); 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"CNY -1,234,567.89"); 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"CNY -1,234,567.89 "); 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L"CNY - 1,234,567.89"); 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == L" CNY -1,234,567.89"); 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 492