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 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 long v = 0; 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0"); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1; 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1"); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = -1; 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == (sizeof(unsigned long long) == 4 ? "4294967295" : "18446744073709551615")); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = -1000; 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "18446744073709550616"); 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1000"); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1000"); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1750"); 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "01750"); 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "3e8"); 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x3e8"); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant uppercase(ios); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0X3E8"); 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant uppercase(ios); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0X3E_8"); 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 2147483647; 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x7f_fff_ff_f"); 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 0123467; 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "123_46_7"); 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 0123467; 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0_123_46_7"); 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 0123467; 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "*****0_123_46_7"); 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 0123467; 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0_123_46_7*****"); 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant oct(ios); 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 0123467; 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "*****0_123_46_7"); 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 2147483647; 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "**0x7f_fff_ff_f"); 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 2147483647; 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x7f_fff_ff_f**"); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant hex(ios); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showbase(ios); 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(15); 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 2147483647; 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "0x**7f_fff_ff_f"); 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "****1_00_0"); 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "1_00_0****"); 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = 1000; 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "****1_00_0"); 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = -1000; 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant right(ios); 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant showpos(ios); 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "18_446_744_073_709_550_61_6"); 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = -1000; 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant left(ios); 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "18_446_744_073_709_550_61_6"); 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned long long v = -1000; 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant internal(ios); 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ios.width(10); 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char str[50]; 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::string ex(str, iter.base()); 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ex == "18_446_744_073_709_550_61_6"); 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(ios.width() == 0); 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 345