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 num_put<charT, OutputIterator> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iter_type put(iter_type s, ios_base& iob, char_type fill, unsigned long v) const; 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <ios> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <streambuf> 2083e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::num_put<char, output_iterator<char*> > F; 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facet 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public F 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facet(std::size_t refs = 0) 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : F(refs) {} 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_numpunct 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public std::numpunct<char> 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant my_numpunct() : std::numpunct<char>() {} 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_thousands_sep() const {return '_';} 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual std::string do_grouping() const {return std::string("\1\2\3");} 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facet f(1); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 0; 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0"); 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1; 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1"); 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = -1; 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == (sizeof(unsigned long) == 4 ? "4294967295" : "18446744073709551615")); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = -1000; 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == (sizeof(unsigned long) == 4 ? "4294966296" : "18446744073709550616")); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1000"); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1000"); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1750"); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "01750"); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "3e8"); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x3e8"); 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant uppercase(ios); 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0X3E8"); 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant uppercase(ios); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0X3E_8"); 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 2147483647; 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x7f_fff_ff_f"); 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 0123467; 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "123_46_7"); 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 0123467; 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0_123_46_7"); 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 0123467; 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "*****0_123_46_7"); 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 0123467; 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0_123_46_7*****"); 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 0123467; 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "*****0_123_46_7"); 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 2147483647; 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "**0x7f_fff_ff_f"); 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 2147483647; 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x7f_fff_ff_f**"); 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 2147483647; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x**7f_fff_ff_f"); 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "****1_00_0"); 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1_00_0****"); 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = 1000; 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "****1_00_0"); 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = -1000; 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6" 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : "18_446_744_073_709_550_61_6")); 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = -1000; 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6" 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : "18_446_744_073_709_550_61_6")); 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long v = -1000; 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err = ios.goodbit; 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == (sizeof(unsigned long) == 4 ? "4_294_966_29_6" 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : "18_446_744_073_709_550_61_6")); 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 375