]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/22_locale/num_get/get/char/16.cc
re PR c++/59378 (Internal compiler error when using __builtin_shuffle in a template...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / num_get / get / char / 16.cc
1 // 2005-04-26 Paolo Carlini <pcarlini@suse.de>
2
3 // Copyright (C) 2005-2013 Free Software Foundation, Inc.
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 3, 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 COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
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
27 void test01()
28 {
29 using namespace std;
30 typedef istreambuf_iterator<char> iterator_type;
31
32 bool test __attribute__((unused)) = true;
33
34 stringstream ss;
35 const num_get<char>& ng = use_facet<num_get<char> >(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 string 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 << '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) );
66 VERIFY( us0 == numeric_limits<unsigned short>::max() );
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 << '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) );
84 VERIFY( ui0 == numeric_limits<unsigned int>::max() );
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 << '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) );
102 VERIFY( ul0 == numeric_limits<unsigned long>::max() );
103
104 l01 = 0L;
105 ss.clear();
106 ss.str(empty);
107 ss << l1 << ' ';
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 << '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) );
120 VERIFY( l01 == numeric_limits<long>::max() );
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 << '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) );
138 VERIFY( l02 == numeric_limits<long>::min() );
139
140 #ifdef _GLIBCXX_USE_LONG_LONG
141 ull0 = 0ULL;
142 ss.clear();
143 ss.str(empty);
144 ss << ull1 << ' ';
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 << '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) );
157 VERIFY( ull0 == numeric_limits<unsigned long long>::max() );
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 << '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) );
175 VERIFY( ll01 == numeric_limits<long long>::max() );
176
177 ll02 = 0LL;
178 ss.clear();
179 ss.str(empty);
180 ss << ll2 << ' ';
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 << '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) );
193 VERIFY( ll02 == numeric_limits<long long>::min() );
194 #endif
195 }
196
197 int main()
198 {
199 test01();
200 return 0;
201 }