]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / time_get / get / char / 3.cc
CommitLineData
c82e4926
JJ
1// { dg-do run { target c++11 } }
2
7adcbafe 3// Copyright (C) 2021-2022 Free Software Foundation, Inc.
c82e4926
JJ
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#include <locale>
21#include <sstream>
22#include <iterator>
23#include <testsuite_hooks.h>
24
25void
26test01()
27{
28 using namespace std;
29
30 locale loc_c = locale::classic();
31
32 istringstream iss;
33 iss.imbue(loc_c);
34 const time_get<char>& tget = use_facet<time_get<char>>(iss.getloc());
35 typedef istreambuf_iterator<char> iter;
36 const iter end;
37
38 tm time;
39 ios_base::iostate err = ios_base::badbit;
40
41 // PR78714 tests
42 iss.str("Mon");
43 string format = "%a";
44 auto ret = tget.get(iter(iss), end, iss, err, &time,
45 format.data(), format.data()+format.size());
46 VERIFY( err == ios_base::eofbit );
47 VERIFY( ret == end );
48 VERIFY( time.tm_wday == 1 );
49
50 iss.str("Tue ");
51 format = "%a";
52 ret = tget.get(iter(iss), end, iss, err, &time,
53 format.data(), format.data()+format.size());
54 VERIFY( err == ios_base::goodbit );
55 VERIFY( ret != end && *ret == ' ' );
56 VERIFY( time.tm_wday == 2 );
57
58 iss.str("Wednesday");
59 format = "%a";
60 ret = tget.get(iter(iss), end, iss, err, &time,
61 format.data(), format.data()+format.size());
62 VERIFY( err == ios_base::eofbit );
63 VERIFY( ret == end );
64 VERIFY( time.tm_wday == 3 );
65
66 iss.str("Thu");
67 format = "%A";
68 ret = tget.get(iter(iss), end, iss, err, &time,
69 format.data(), format.data()+format.size());
70 VERIFY( err == ios_base::eofbit );
71 VERIFY( ret == end );
72 VERIFY( time.tm_wday == 4 );
73
74 iss.str("Fri ");
75 format = "%A";
76 ret = tget.get(iter(iss), end, iss, err, &time,
77 format.data(), format.data()+format.size());
78 VERIFY( err == ios_base::goodbit );
79 VERIFY( ret != end && *ret == ' ' );
80 VERIFY( time.tm_wday == 5 );
81
82 iss.str("Saturday");
83 format = "%A";
84 ret = tget.get(iter(iss), end, iss, err, &time,
85 format.data(), format.data()+format.size());
86 VERIFY( err == ios_base::eofbit );
87 VERIFY( ret == end );
88 VERIFY( time.tm_wday == 6 );
89
90 iss.str("Feb");
91 format = "%b";
92 ret = tget.get(iter(iss), end, iss, err, &time,
93 format.data(), format.data()+format.size());
94 VERIFY( err == ios_base::eofbit );
95 VERIFY( ret == end );
96 VERIFY( time.tm_mon == 1 );
97
98 iss.str("Mar ");
99 format = "%b";
100 ret = tget.get(iter(iss), end, iss, err, &time,
101 format.data(), format.data()+format.size());
102 VERIFY( err == ios_base::goodbit );
103 VERIFY( ret != end && *ret == ' ' );
104 VERIFY( time.tm_mon == 2 );
105
106 iss.str("April");
107 format = "%b";
108 ret = tget.get(iter(iss), end, iss, err, &time,
109 format.data(), format.data()+format.size());
110 VERIFY( err == ios_base::eofbit );
111 VERIFY( ret == end );
112 VERIFY( time.tm_mon == 3 );
113
114 iss.str("May");
115 format = "%B";
116 ret = tget.get(iter(iss), end, iss, err, &time,
117 format.data(), format.data()+format.size());
118 VERIFY( err == ios_base::eofbit );
119 VERIFY( ret == end );
120 VERIFY( time.tm_mon == 4 );
121
122 iss.str("Jun ");
123 format = "%B";
124 ret = tget.get(iter(iss), end, iss, err, &time,
125 format.data(), format.data()+format.size());
126 VERIFY( err == ios_base::goodbit );
127 VERIFY( ret != end && *ret == ' ' );
128 VERIFY( time.tm_mon == 5 );
129
130 iss.str("July");
131 format = "%B";
132 ret = tget.get(iter(iss), end, iss, err, &time,
133 format.data(), format.data()+format.size());
134 VERIFY( err == ios_base::eofbit );
135 VERIFY( ret == end );
136 VERIFY( time.tm_mon == 6 );
137
138 iss.str("Aug");
139 format = "%h";
140 ret = tget.get(iter(iss), end, iss, err, &time,
141 format.data(), format.data()+format.size());
142 VERIFY( err == ios_base::eofbit );
143 VERIFY( ret == end );
144 VERIFY( time.tm_mon == 7 );
145
146 iss.str("May ");
147 format = "%h";
148 ret = tget.get(iter(iss), end, iss, err, &time,
149 format.data(), format.data()+format.size());
150 VERIFY( err == ios_base::goodbit );
151 VERIFY( ret != end && *ret == ' ' );
152 VERIFY( time.tm_mon == 4 );
153
154 iss.str("October");
155 format = "%h";
156 ret = tget.get(iter(iss), end, iss, err, &time,
157 format.data(), format.data()+format.size());
158 VERIFY( err == ios_base::eofbit );
159 VERIFY( ret == end );
160 VERIFY( time.tm_mon == 9 );
161
162 // Other tests.
163 iss.str(" 1.");
164 format = "%d.";
165 ret = tget.get(iter(iss), end, iss, err, &time,
166 format.data(), format.data()+format.size());
167 VERIFY( err == ios_base::goodbit );
168 VERIFY( ret == end );
169 VERIFY( time.tm_mday == 1 );
170
171 iss.str("2.");
172 format = "%d.";
173 ret = tget.get(iter(iss), end, iss, err, &time,
174 format.data(), format.data()+format.size());
175 VERIFY( err == ios_base::goodbit );
176 VERIFY( ret == end );
177 VERIFY( time.tm_mday == 2 );
178
179 iss.str("03.");
180 format = "%d.";
181 ret = tget.get(iter(iss), end, iss, err, &time,
182 format.data(), format.data()+format.size());
183 VERIFY( err == ios_base::goodbit );
184 VERIFY( ret == end );
185 VERIFY( time.tm_mday == 3 );
186
187 iss.str("0.");
188 format = "%d.";
189 ret = tget.get(iter(iss), end, iss, err, &time,
190 format.data(), format.data()+format.size());
191 VERIFY( err == ios_base::failbit );
192 VERIFY( ret != end && *ret == '.' );
193
194 iss.str("32.");
195 format = "%d.";
196 ret = tget.get(iter(iss), end, iss, err, &time,
197 format.data(), format.data()+format.size());
198 VERIFY( err == ios_base::failbit );
199 VERIFY( ret != end && *ret == '2' );
200
201 iss.str(" 4.");
202 format = "%e.";
203 ret = tget.get(iter(iss), end, iss, err, &time,
204 format.data(), format.data()+format.size());
205 VERIFY( err == ios_base::goodbit );
206 VERIFY( ret == end );
207 VERIFY( time.tm_mday == 4 );
208
209 iss.str("5.");
210 format = "%e.";
211 ret = tget.get(iter(iss), end, iss, err, &time,
212 format.data(), format.data()+format.size());
213 VERIFY( err == ios_base::goodbit );
214 VERIFY( ret == end );
215 VERIFY( time.tm_mday == 5 );
216
217 iss.str("06.");
218 format = "%e.";
219 ret = tget.get(iter(iss), end, iss, err, &time,
220 format.data(), format.data()+format.size());
221 VERIFY( err == ios_base::goodbit );
222 VERIFY( ret == end );
223 VERIFY( time.tm_mday == 6 );
224
225 iss.str("0");
226 format = "%e";
227 ret = tget.get(iter(iss), end, iss, err, &time,
228 format.data(), format.data()+format.size());
229 VERIFY( err == ios_base::failbit|ios_base::eofbit );
230 VERIFY( ret == end );
231
232 iss.str("35");
233 format = "%e";
234 ret = tget.get(iter(iss), end, iss, err, &time,
235 format.data(), format.data()+format.size());
236 VERIFY( err == ios_base::failbit );
237 VERIFY( ret != end && *ret == '5' );
238
239 iss.str(" \t\t 02");
240 format = "%t%m";
241 ret = tget.get(iter(iss), end, iss, err, &time,
242 format.data(), format.data()+format.size());
243 VERIFY( err == ios_base::eofbit );
244 VERIFY( ret == end );
245 VERIFY( time.tm_mon == 1 );
246
247 iss.str(" \t \t 03");
248 format = "%n%m";
249 ret = tget.get(iter(iss), end, iss, err, &time,
250 format.data(), format.data()+format.size());
251 VERIFY( err == ios_base::eofbit );
252 VERIFY( ret == end );
253 VERIFY( time.tm_mon == 2 );
254
255 iss.str(" \t \t 4");
256 format = " %m";
257 ret = tget.get(iter(iss), end, iss, err, &time,
258 format.data(), format.data()+format.size());
259 VERIFY( err == ios_base::eofbit );
260 VERIFY( ret == end );
261 VERIFY( time.tm_mon == 3 );
262
263 iss.str(" \t \t 5");
264 format = "\t%m";
265 ret = tget.get(iter(iss), end, iss, err, &time,
266 format.data(), format.data()+format.size());
267 VERIFY( err == ios_base::eofbit );
268 VERIFY( ret == end );
269 VERIFY( time.tm_mon == 4 );
270
271 iss.str("12:00AM");
272 format = "%I:%M%p";
273 ret = tget.get(iter(iss), end, iss, err, &time,
274 format.data(), format.data()+format.size());
275 VERIFY( err == ios_base::eofbit );
276 VERIFY( ret == end );
277 VERIFY( time.tm_hour == 0 );
278 VERIFY( time.tm_min == 0 );
279
280 iss.str("12:37AM");
281 format = "%I:%M%p";
282 ret = tget.get(iter(iss), end, iss, err, &time,
283 format.data(), format.data()+format.size());
284 VERIFY( err == ios_base::eofbit );
285 VERIFY( ret == end );
286 VERIFY( time.tm_hour == 0 );
287 VERIFY( time.tm_min == 37 );
288
289 iss.str("01:25AM");
290 format = "%I:%M%p";
291 ret = tget.get(iter(iss), end, iss, err, &time,
292 format.data(), format.data()+format.size());
293 VERIFY( err == ios_base::eofbit );
294 VERIFY( ret == end );
295 VERIFY( time.tm_hour == 1 );
296 VERIFY( time.tm_min == 25 );
297
298 iss.str("12:00PM");
299 format = "%I:%M%p";
300 ret = tget.get(iter(iss), end, iss, err, &time,
301 format.data(), format.data()+format.size());
302 VERIFY( err == ios_base::eofbit );
303 VERIFY( ret == end );
304 VERIFY( time.tm_hour == 12 );
305 VERIFY( time.tm_min == 0 );
306
307 iss.str("12:42PM");
308 format = "%I:%M%p";
309 ret = tget.get(iter(iss), end, iss, err, &time,
310 format.data(), format.data()+format.size());
311 VERIFY( err == ios_base::eofbit );
312 VERIFY( ret == end );
313 VERIFY( time.tm_hour == 12 );
314 VERIFY( time.tm_min == 42 );
315
316 iss.str("07:23PM");
317 format = "%I:%M%p";
318 ret = tget.get(iter(iss), end, iss, err, &time,
319 format.data(), format.data()+format.size());
320 VERIFY( err == ios_base::eofbit );
321 VERIFY( ret == end );
322 VERIFY( time.tm_hour == 19 );
323 VERIFY( time.tm_min == 23 );
324
325 iss.str("17%20");
326 format = "%H%%%M";
327 ret = tget.get(iter(iss), end, iss, err, &time,
328 format.data(), format.data()+format.size());
329 VERIFY( err == ios_base::eofbit );
330 VERIFY( ret == end );
331 VERIFY( time.tm_hour == 17 );
332 VERIFY( time.tm_min == 20 );
333
334 iss.str("24:30");
335 format = "%H:%M";
336 ret = tget.get(iter(iss), end, iss, err, &time,
337 format.data(), format.data()+format.size());
338 VERIFY( err == ios_base::failbit );
339 VERIFY( ret != end && *ret == '4' );
340
341 // This one behaves differently from strptime, in a single
342 // pass scaning we can't go back.
343 iss.str("Novembur");
344 format = "%bembur";
345 ret = tget.get(iter(iss), end, iss, err, &time,
346 format.data(), format.data()+format.size());
347 VERIFY( err == ios_base::failbit );
348 VERIFY( ret != end && *ret == 'u' );
349}
350
351int
352main()
353{
354 test01();
355 return 0;
356}