]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/16.cc
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / num_get / get / wchar_t / 16.cc
CommitLineData
44ecf603
PC
1// 2005-04-26 Paolo Carlini <pcarlini@suse.de>
2
748086b7 3// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation
44ecf603
PC
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
748086b7 8// Free Software Foundation; either version 3, or (at your option)
44ecf603
PC
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
748086b7
JJ
17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
44ecf603
PC
19
20// 22.2.2.1.1 num_get members
21
22#include <locale>
23#include <sstream>
24#include <limits>
25#include <testsuite_hooks.h>
26
27void test01()
28{
29 using namespace std;
30 typedef istreambuf_iterator<wchar_t> iterator_type;
31
32 bool test __attribute__((unused)) = true;
33
34 wstringstream ss;
35 const num_get<wchar_t>& ng = use_facet<num_get<wchar_t> >(ss.getloc());
36 ios_base::iostate err;
37 iterator_type end;
38
39 unsigned short us0, us1 = numeric_limits<unsigned short>::max();
40 unsigned int ui0, ui1 = numeric_limits<unsigned int>::max();
41 unsigned long ul0, ul1 = numeric_limits<unsigned long>::max();
42 long l01, l1 = numeric_limits<long>::max();
43 long l02, l2 = numeric_limits<long>::min();
44#ifdef _GLIBCXX_USE_LONG_LONG
45 unsigned long long ull0, ull1 = numeric_limits<unsigned long long>::max();
46 long long ll01, ll1 = numeric_limits<long long>::max();
47 long long ll02, ll2 = numeric_limits<long long>::min();
48#endif
49
50 const wstring empty;
51
52 us0 = 0;
53 ss << us1;
54 err = ios_base::goodbit;
55 end = ng.get(ss.rdbuf(), 0, ss, err, us0);
56 VERIFY( err == ios_base::eofbit );
57 VERIFY( us0 == us1 );
58
59 us0 = 0;
60 ss.clear();
61 ss.str(empty);
62 ss << us1 << L'0';
63 err = ios_base::goodbit;
64 end = ng.get(ss.rdbuf(), 0, ss, err, us0);
65 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 66 VERIFY( us0 == numeric_limits<unsigned short>::max() );
44ecf603
PC
67
68 ui0 = 0U;
69 ss.clear();
70 ss.str(empty);
71 ss << ui1 << ' ';
72 err = ios_base::goodbit;
73 end = ng.get(ss.rdbuf(), 0, ss, err, ui0);
74 VERIFY( err == ios_base::goodbit );
75 VERIFY( ui0 == ui1 );
76
77 ui0 = 0U;
78 ss.clear();
79 ss.str(empty);
80 ss << ui1 << L'1';
81 err = ios_base::goodbit;
82 end = ng.get(ss.rdbuf(), 0, ss, err, ui0);
83 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 84 VERIFY( ui0 == numeric_limits<unsigned int>::max() );
44ecf603
PC
85
86 ul0 = 0UL;
87 ss.clear();
88 ss.str(empty);
89 ss << ul1;
90 err = ios_base::goodbit;
91 end = ng.get(ss.rdbuf(), 0, ss, err, ul0);
92 VERIFY( err == ios_base::eofbit );
93 VERIFY( ul0 == ul1 );
94
95 ul0 = 0UL;
96 ss.clear();
97 ss.str(empty);
98 ss << ul1 << L'2';
99 err = ios_base::goodbit;
100 end = ng.get(ss.rdbuf(), 0, ss, err, ul0);
101 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 102 VERIFY( ul0 == numeric_limits<unsigned long>::max() );
44ecf603
PC
103
104 l01 = 0L;
105 ss.clear();
106 ss.str(empty);
107 ss << l1 << L' ';
108 err = ios_base::goodbit;
109 end = ng.get(ss.rdbuf(), 0, ss, err, l01);
110 VERIFY( err == ios_base::goodbit );
111 VERIFY( l01 == l1 );
112
113 l01 = 0L;
114 ss.clear();
115 ss.str(empty);
116 ss << l1 << L'3';
117 err = ios_base::goodbit;
118 end = ng.get(ss.rdbuf(), 0, ss, err, l01);
119 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 120 VERIFY( l01 == numeric_limits<long>::max() );
44ecf603
PC
121
122 l02 = 0L;
123 ss.clear();
124 ss.str(empty);
125 ss << l2;
126 err = ios_base::goodbit;
127 end = ng.get(ss.rdbuf(), 0, ss, err, l02);
128 VERIFY( err == ios_base::eofbit );
129 VERIFY( l02 == l2 );
130
131 l02 = 0L;
132 ss.clear();
133 ss.str(empty);
134 ss << l2 << L'4';
135 err = ios_base::goodbit;
136 end = ng.get(ss.rdbuf(), 0, ss, err, l02);
137 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 138 VERIFY( l02 == numeric_limits<long>::min() );
44ecf603
PC
139
140#ifdef _GLIBCXX_USE_LONG_LONG
141 ull0 = 0ULL;
142 ss.clear();
143 ss.str(empty);
144 ss << ull1 << L' ';
145 err = ios_base::goodbit;
146 end = ng.get(ss.rdbuf(), 0, ss, err, ull0);
147 VERIFY( err == ios_base::goodbit );
148 VERIFY( ull0 == ull1 );
149
150 ull0 = 0ULL;
151 ss.clear();
152 ss.str(empty);
153 ss << ull1 << L'5';
154 err = ios_base::goodbit;
155 end = ng.get(ss.rdbuf(), 0, ss, err, ull0);
156 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 157 VERIFY( ull0 == numeric_limits<unsigned long long>::max() );
44ecf603
PC
158
159 ll01 = 0LL;
160 ss.clear();
161 ss.str(empty);
162 ss << ll1;
163 err = ios_base::goodbit;
164 end = ng.get(ss.rdbuf(), 0, ss, err, ll01);
165 VERIFY( err == ios_base::eofbit );
166 VERIFY( ll01 == ll1 );
167
168 ll01 = 0LL;
169 ss.clear();
170 ss.str(empty);
171 ss << ll1 << L'6';
172 err = ios_base::goodbit;
173 end = ng.get(ss.rdbuf(), 0, ss, err, ll01);
174 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 175 VERIFY( ll01 == numeric_limits<long long>::max() );
44ecf603
PC
176
177 ll02 = 0LL;
178 ss.clear();
179 ss.str(empty);
180 ss << ll2 << L' ';
181 err = ios_base::goodbit;
182 end = ng.get(ss.rdbuf(), 0, ss, err, ll02);
183 VERIFY( err == ios_base::goodbit );
184 VERIFY( ll02 == ll2 );
185
186 ll02 = 0LL;
187 ss.clear();
188 ss.str(empty);
189 ss << ll2 << L'7';
190 err = ios_base::goodbit;
191 end = ng.get(ss.rdbuf(), 0, ss, err, ll02);
192 VERIFY( err == (ios_base::failbit | ios_base::eofbit) );
5ef46f95 193 VERIFY( ll02 == numeric_limits<long long>::min() );
44ecf603
PC
194#endif
195}
196
197int main()
198{
199 test01();
200 return 0;
201}