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//===----------------------------------------------------------------------===// 943807c2fbad2eb788250dccfc4c61205efb6b7aaDaniel Dunbar// 1043807c2fbad2eb788250dccfc4c61205efb6b7aaDaniel Dunbar// XFAIL: apple-darwin 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class money_put<charT, OutputIterator> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iter_type put(iter_type s, bool intl, ios_base& f, char_type fill, 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// long double units) const; 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <ios> 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <streambuf> 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 2383e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2583e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "platform_support.h" // locale name macros 26c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::money_put<char, output_iterator<char*> > Fn; 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facet 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public Fn 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facet(std::size_t refs = 0) 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : Fn(refs) {} 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::money_put<wchar_t, output_iterator<wchar_t*> > Fw; 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facetw 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public Fw 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facetw(std::size_t refs = 0) 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : Fw(refs) {} 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 50c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant std::string loc_name(LOCALE_fr_FR_UTF_8); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<char, false>(loc_name))); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<char, true>(loc_name))); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<wchar_t, false>(loc_name))); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(ios.getloc(), 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant new std::moneypunct_byname<wchar_t, true>(loc_name))); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facet f(1); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // char, national 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 68558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "0,00"); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 76558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-0,01"); 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 84558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "1 234 567,89"); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 92558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89"); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 101558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "0,00 \u20ac"); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 110558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-0,01 \u20ac"); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 119558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "1 234 567,89 \u20ac"); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 128558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89 \u20ac"); 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 139558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89 \u20ac "); 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 151558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89 \u20ac"); 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 163558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == " -1 234 567,89 \u20ac"); 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // char, international 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 176558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "0,00"); 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 184558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-0,01"); 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 192558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "1 234 567,89"); 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 200558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89"); 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 209558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "0,00 EUR"); 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 218558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-0,01 EUR"); 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 227558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "1 234 567,89 EUR"); 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 236558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89 EUR"); 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 247558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89 EUR "); 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 259558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == "-1 234 567,89 EUR"); 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[100]; 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 271558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == " -1 234 567,89 EUR"); 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facetw f(1); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // wchar_t, national 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 286558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"0,00"); 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 294558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-0,01"); 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 302558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"1 234 567,89"); 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 310558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89"); 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 319558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"0,00 \u20ac"); 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 328558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-0,01 \u20ac"); 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 337558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"1 234 567,89 \u20ac"); 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, '*', v); 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 346558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89 \u20ac"); 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 357558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89 \u20ac "); 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 369558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89 \u20ac"); 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant false, ios, ' ', v); 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 381558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L" -1 234 567,89 \u20ac"); 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // wchar_t, international 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant noshowbase(ios); 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.unsetf(std::ios_base::adjustfield); 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 394558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"0,00"); 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 402558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-0,01"); 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 410558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"1 234 567,89"); 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 418558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89"); 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // zero, showbase 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 0; 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 427558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"0,00 EUR"); 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative one, showbase 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -1; 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 436558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-0,01 EUR"); 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // positive, showbase 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = 123456789; 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 445558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"1 234 567,89 EUR"); 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, '*', v); 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 454558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89 EUR"); 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, left 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 465558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89 EUR "); 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, internal 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 477558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L"-1 234 567,89 EUR"); 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { // negative, showbase, right 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long double v = -123456789; 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(20); 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant wchar_t str[100]; 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str), 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant true, ios, ' ', v); 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::wstring ex(str, iter.base()); 489558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin assert(ex == L" -1 234 567,89 EUR"); 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 493bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 494