]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
locale_facets.tcc: Tweak to avoid warnings.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / num_put / put / wchar_t / 1.cc
CommitLineData
5f8d36fe
BK
1// 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
2
3// Copyright (C) 2001, 2002, 2003 Free Software Foundation
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING. If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// 22.2.2.2.1 num_put members
22
23#include <locale>
24#include <sstream>
25#include <testsuite_hooks.h>
26
27void test01()
28{
29 using namespace std;
30 typedef ostreambuf_iterator<wchar_t> iterator_type;
31
11f10e6b 32 bool test __attribute__((unused)) = true;
5f8d36fe
BK
33
34 // basic construction
35 locale loc_c = locale::classic();
aecf642c
BK
36 locale loc_hk = __gnu_test::try_named_locale("en_HK");
37 locale loc_fr = __gnu_test::try_named_locale("fr_FR@euro");
38 locale loc_de = __gnu_test::try_named_locale("de_DE");
5f8d36fe
BK
39 VERIFY( loc_c != loc_de );
40 VERIFY( loc_hk != loc_fr );
41 VERIFY( loc_hk != loc_de );
42 VERIFY( loc_de != loc_fr );
43
44 // cache the numpunct facets
11f10e6b
BK
45 const numpunct<wchar_t>& numpunct_de = use_facet<numpunct<wchar_t> >(loc_de);
46
5f8d36fe
BK
47 // sanity check the data is correct.
48 const wstring empty;
49 wstring result1;
50 wstring result2;
5f8d36fe
BK
51
52 bool b1 = true;
53 bool b0 = false;
5f8d36fe 54 unsigned long ul1 = 1294967294;
5f8d36fe
BK
55 double d1 = 1.7976931348623157e+308;
56 double d2 = 2.2250738585072014e-308;
57 long double ld1 = 1.7976931348623157e+308;
58 long double ld2 = 2.2250738585072014e-308;
59 const void* cv = &ld1;
60
61 // cache the num_put facet
62 wostringstream oss;
63 oss.imbue(loc_de);
64 const num_put<wchar_t>& np = use_facet<num_put<wchar_t> >(oss.getloc());
65
66 // bool, simple
67 iterator_type os_it00 = oss.rdbuf();
68 iterator_type os_it01 = np.put(os_it00, oss, '+', b1);
69 result1 = oss.str();
70 VERIFY( result1 == L"1" );
71 // VERIFY( os_it00 != os_it01 );
72
73 oss.str(empty);
74 np.put(oss.rdbuf(), oss, '+', b0);
75 result2 = oss.str();
76 VERIFY( result2 == L"0" );
77
78 // ... and one that does
79 oss.imbue(loc_de);
80 oss.str(empty);
81 oss.clear();
82 oss.width(20);
83 oss.setf(ios_base::left, ios_base::adjustfield);
84 np.put(oss.rdbuf(), oss, '+', ul1);
85 result1 = oss.str();
86 VERIFY( result1 == L"1.294.967.294+++++++" );
87
88 // double
89 oss.str(empty);
90 oss.clear();
91 oss.width(20);
92 oss.setf(ios_base::left, ios_base::adjustfield);
93 np.put(oss.rdbuf(), oss, '+', d1);
94 result1 = oss.str();
95 VERIFY( result1 == L"1,79769e+308++++++++" );
96
97 oss.str(empty);
98 oss.clear();
99 oss.width(20);
100 oss.setf(ios_base::right, ios_base::adjustfield);
101 np.put(oss.rdbuf(), oss, '+', d2);
102 result1 = oss.str();
103 VERIFY( result1 == L"++++++++2,22507e-308" );
104
105 oss.str(empty);
106 oss.clear();
107 oss.width(20);
108 oss.setf(ios_base::right, ios_base::adjustfield);
109 oss.setf(ios_base::scientific, ios_base::floatfield);
110 np.put(oss.rdbuf(), oss, '+', d2);
111 result2 = oss.str();
112 VERIFY( result2 == L"+++++++2,225074e-308" );
113
114 oss.str(empty);
115 oss.clear();
116 oss.width(20);
117 oss.precision(10);
118 oss.setf(ios_base::right, ios_base::adjustfield);
119 oss.setf(ios_base::scientific, ios_base::floatfield);
120 oss.setf(ios_base::uppercase);
121 np.put(oss.rdbuf(), oss, '+', d2);
122 result1 = oss.str();
123 VERIFY( result1 == L"+++2,2250738585E-308" );
124
125 // long double
126 oss.str(empty);
127 oss.clear();
128 np.put(oss.rdbuf(), oss, '+', ld1);
129 result1 = oss.str();
130 VERIFY( result1 == L"1,7976931349E+308" );
131
132 oss.str(empty);
133 oss.clear();
134 oss.precision(0);
135 oss.setf(ios_base::fixed, ios_base::floatfield);
136 np.put(oss.rdbuf(), oss, '+', ld2);
137 result1 = oss.str();
138 VERIFY( result1 == L"0" );
139
140 // const void
141 oss.str(empty);
142 oss.clear();
143 np.put(oss.rdbuf(), oss, '+', cv);
144 result1 = oss.str();
145 // No grouping characters.
146 VERIFY( !char_traits<wchar_t>::find(result1.c_str(),
147 result1.size(),
148 numpunct_de.decimal_point()) );
149 // Should contain an 'x'.
150 VERIFY( result1.find(L'x') == 1 );
151
3d7c150e 152#ifdef _GLIBCXX_USE_LONG_LONG
5f8d36fe 153 long long ll1 = 9223372036854775807LL;
5f8d36fe
BK
154
155 oss.str(empty);
156 oss.clear();
157 np.put(oss.rdbuf(), oss, '+', ll1);
158 result1 = oss.str();
159 VERIFY( result1 == L"9.223.372.036.854.775.807" );
160#endif
161}
162
163int main()
164{
165 test01();
166 return 0;
167}
168
169