]>
Commit | Line | Data |
---|---|---|
44ecf603 PC |
1 | // 2005-04-26 Paolo Carlini <pcarlini@suse.de> |
2 | ||
99dee823 | 3 | // Copyright (C) 2005-2021 Free Software Foundation, Inc. |
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 | ||
27 | void test01() | |
28 | { | |
29 | using namespace std; | |
30 | typedef istreambuf_iterator<char> iterator_type; | |
44ecf603 PC |
31 | |
32 | stringstream ss; | |
33 | const num_get<char>& ng = use_facet<num_get<char> >(ss.getloc()); | |
34 | ios_base::iostate err; | |
35 | iterator_type end; | |
36 | ||
37 | unsigned short us0, us1 = numeric_limits<unsigned short>::max(); | |
38 | unsigned int ui0, ui1 = numeric_limits<unsigned int>::max(); | |
39 | unsigned long ul0, ul1 = numeric_limits<unsigned long>::max(); | |
40 | long l01, l1 = numeric_limits<long>::max(); | |
41 | long l02, l2 = numeric_limits<long>::min(); | |
42 | #ifdef _GLIBCXX_USE_LONG_LONG | |
43 | unsigned long long ull0, ull1 = numeric_limits<unsigned long long>::max(); | |
44 | long long ll01, ll1 = numeric_limits<long long>::max(); | |
45 | long long ll02, ll2 = numeric_limits<long long>::min(); | |
46 | #endif | |
47 | ||
48 | const string empty; | |
49 | ||
50 | us0 = 0; | |
51 | ss << us1; | |
52 | err = ios_base::goodbit; | |
53 | end = ng.get(ss.rdbuf(), 0, ss, err, us0); | |
54 | VERIFY( err == ios_base::eofbit ); | |
55 | VERIFY( us0 == us1 ); | |
56 | ||
57 | us0 = 0; | |
58 | ss.clear(); | |
59 | ss.str(empty); | |
60 | ss << us1 << '0'; | |
61 | err = ios_base::goodbit; | |
62 | end = ng.get(ss.rdbuf(), 0, ss, err, us0); | |
63 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 64 | VERIFY( us0 == numeric_limits<unsigned short>::max() ); |
44ecf603 PC |
65 | |
66 | ui0 = 0U; | |
67 | ss.clear(); | |
68 | ss.str(empty); | |
69 | ss << ui1 << ' '; | |
70 | err = ios_base::goodbit; | |
71 | end = ng.get(ss.rdbuf(), 0, ss, err, ui0); | |
72 | VERIFY( err == ios_base::goodbit ); | |
73 | VERIFY( ui0 == ui1 ); | |
74 | ||
75 | ui0 = 0U; | |
76 | ss.clear(); | |
77 | ss.str(empty); | |
78 | ss << ui1 << '1'; | |
79 | err = ios_base::goodbit; | |
80 | end = ng.get(ss.rdbuf(), 0, ss, err, ui0); | |
81 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 82 | VERIFY( ui0 == numeric_limits<unsigned int>::max() ); |
44ecf603 PC |
83 | |
84 | ul0 = 0UL; | |
85 | ss.clear(); | |
86 | ss.str(empty); | |
87 | ss << ul1; | |
88 | err = ios_base::goodbit; | |
89 | end = ng.get(ss.rdbuf(), 0, ss, err, ul0); | |
90 | VERIFY( err == ios_base::eofbit ); | |
91 | VERIFY( ul0 == ul1 ); | |
92 | ||
93 | ul0 = 0UL; | |
94 | ss.clear(); | |
95 | ss.str(empty); | |
96 | ss << ul1 << '2'; | |
97 | err = ios_base::goodbit; | |
98 | end = ng.get(ss.rdbuf(), 0, ss, err, ul0); | |
99 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 100 | VERIFY( ul0 == numeric_limits<unsigned long>::max() ); |
44ecf603 PC |
101 | |
102 | l01 = 0L; | |
103 | ss.clear(); | |
104 | ss.str(empty); | |
105 | ss << l1 << ' '; | |
106 | err = ios_base::goodbit; | |
107 | end = ng.get(ss.rdbuf(), 0, ss, err, l01); | |
108 | VERIFY( err == ios_base::goodbit ); | |
109 | VERIFY( l01 == l1 ); | |
110 | ||
111 | l01 = 0L; | |
112 | ss.clear(); | |
113 | ss.str(empty); | |
114 | ss << l1 << '3'; | |
115 | err = ios_base::goodbit; | |
116 | end = ng.get(ss.rdbuf(), 0, ss, err, l01); | |
117 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 118 | VERIFY( l01 == numeric_limits<long>::max() ); |
44ecf603 PC |
119 | |
120 | l02 = 0L; | |
121 | ss.clear(); | |
122 | ss.str(empty); | |
123 | ss << l2; | |
124 | err = ios_base::goodbit; | |
125 | end = ng.get(ss.rdbuf(), 0, ss, err, l02); | |
126 | VERIFY( err == ios_base::eofbit ); | |
127 | VERIFY( l02 == l2 ); | |
128 | ||
129 | l02 = 0L; | |
130 | ss.clear(); | |
131 | ss.str(empty); | |
132 | ss << l2 << '4'; | |
133 | err = ios_base::goodbit; | |
134 | end = ng.get(ss.rdbuf(), 0, ss, err, l02); | |
135 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 136 | VERIFY( l02 == numeric_limits<long>::min() ); |
44ecf603 PC |
137 | |
138 | #ifdef _GLIBCXX_USE_LONG_LONG | |
139 | ull0 = 0ULL; | |
140 | ss.clear(); | |
141 | ss.str(empty); | |
142 | ss << ull1 << ' '; | |
143 | err = ios_base::goodbit; | |
144 | end = ng.get(ss.rdbuf(), 0, ss, err, ull0); | |
145 | VERIFY( err == ios_base::goodbit ); | |
146 | VERIFY( ull0 == ull1 ); | |
147 | ||
148 | ull0 = 0ULL; | |
149 | ss.clear(); | |
150 | ss.str(empty); | |
151 | ss << ull1 << '5'; | |
152 | err = ios_base::goodbit; | |
153 | end = ng.get(ss.rdbuf(), 0, ss, err, ull0); | |
154 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 155 | VERIFY( ull0 == numeric_limits<unsigned long long>::max() ); |
44ecf603 PC |
156 | |
157 | ll01 = 0LL; | |
158 | ss.clear(); | |
159 | ss.str(empty); | |
160 | ss << ll1; | |
161 | err = ios_base::goodbit; | |
162 | end = ng.get(ss.rdbuf(), 0, ss, err, ll01); | |
163 | VERIFY( err == ios_base::eofbit ); | |
164 | VERIFY( ll01 == ll1 ); | |
165 | ||
166 | ll01 = 0LL; | |
167 | ss.clear(); | |
168 | ss.str(empty); | |
169 | ss << ll1 << '6'; | |
170 | err = ios_base::goodbit; | |
171 | end = ng.get(ss.rdbuf(), 0, ss, err, ll01); | |
172 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 173 | VERIFY( ll01 == numeric_limits<long long>::max() ); |
44ecf603 PC |
174 | |
175 | ll02 = 0LL; | |
176 | ss.clear(); | |
177 | ss.str(empty); | |
178 | ss << ll2 << ' '; | |
179 | err = ios_base::goodbit; | |
180 | end = ng.get(ss.rdbuf(), 0, ss, err, ll02); | |
181 | VERIFY( err == ios_base::goodbit ); | |
182 | VERIFY( ll02 == ll2 ); | |
183 | ||
184 | ll02 = 0LL; | |
185 | ss.clear(); | |
186 | ss.str(empty); | |
187 | ss << ll2 << '7'; | |
188 | err = ios_base::goodbit; | |
189 | end = ng.get(ss.rdbuf(), 0, ss, err, ll02); | |
190 | VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); | |
5ef46f95 | 191 | VERIFY( ll02 == numeric_limits<long long>::min() ); |
44ecf603 PC |
192 | #endif |
193 | } | |
194 | ||
195 | int main() | |
196 | { | |
197 | test01(); | |
198 | return 0; | |
199 | } |