]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / time_get / get / wchar_t / 3.cc
1 // { dg-do run { target c++11 } }
2
3 // Copyright (C) 2021-2022 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 #include <locale>
21 #include <sstream>
22 #include <iterator>
23 #include <testsuite_hooks.h>
24
25 void
26 test01()
27 {
28 using namespace std;
29
30 locale loc_c = locale::classic();
31
32 wistringstream iss;
33 iss.imbue(loc_c);
34 const time_get<wchar_t>& tget = use_facet<time_get<wchar_t>>(iss.getloc());
35 typedef istreambuf_iterator<wchar_t> iter;
36 const iter end;
37
38 tm time;
39 ios_base::iostate err = ios_base::badbit;
40
41 // PR78714 tests
42 iss.str(L"Mon");
43 wstring format = L"%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(L"Tue L");
51 format = L"%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 == L' ' );
56 VERIFY( time.tm_wday == 2 );
57
58 iss.str(L"Wednesday");
59 format = L"%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(L"Thu");
67 format = L"%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(L"Fri L");
75 format = L"%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 == L' ' );
80 VERIFY( time.tm_wday == 5 );
81
82 iss.str(L"Saturday");
83 format = L"%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(L"Feb");
91 format = L"%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(L"Mar L");
99 format = L"%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 == L' ' );
104 VERIFY( time.tm_mon == 2 );
105
106 iss.str(L"April");
107 format = L"%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(L"May");
115 format = L"%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(L"Jun L");
123 format = L"%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 == L' ' );
128 VERIFY( time.tm_mon == 5 );
129
130 iss.str(L"July");
131 format = L"%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(L"Aug");
139 format = L"%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(L"May L");
147 format = L"%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 == L' ' );
152 VERIFY( time.tm_mon == 4 );
153
154 iss.str(L"October");
155 format = L"%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(L" 1.");
164 format = L"%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(L"2.");
172 format = L"%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(L"03.");
180 format = L"%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(L"0.");
188 format = L"%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 == L'.' );
193
194 iss.str(L"32.");
195 format = L"%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 == L'2' );
200
201 iss.str(L" 4.");
202 format = L"%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(L"5.");
210 format = L"%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(L"06.");
218 format = L"%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(L"0");
226 format = L"%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(L"35");
233 format = L"%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 == L'5' );
238
239 iss.str(L" \t\t 02");
240 format = L"%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(L" \t \t 03");
248 format = L"%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(L" \t \t 4");
256 format = L" %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(L" \t \t 5");
264 format = L"\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(L"12:00AM");
272 format = L"%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(L"12:37AM");
281 format = L"%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(L"01:25AM");
290 format = L"%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(L"12:00PM");
299 format = L"%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(L"12:42PM");
308 format = L"%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(L"07:23PM");
317 format = L"%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(L"17%20");
326 format = L"%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(L"24:30");
335 format = L"%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 == L'4' );
340
341 // This one behaves differently from strptime, in a single
342 // pass scaning we can't go back.
343 iss.str(L"Novembur");
344 format = L"%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 == L'u' );
349 }
350
351 int
352 main()
353 {
354 test01();
355 return 0;
356 }