]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / time_get / get / wchar_t / 4.cc
CommitLineData
a8d3c987
JJ
1// { dg-do run { target c++11 } }
2
83ffe9cd 3// Copyright (C) 2021-2023 Free Software Foundation, Inc.
a8d3c987
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 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 iss.str(L"PM01:38:12");
42 wstring format = L"%p%I:%M:%S";
43 time = tm();
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_hour == 13 );
49 VERIFY( time.tm_min == 38 );
50 VERIFY( time.tm_sec == 12 );
51
52 iss.str(L"05 37");
53 format = L"%C %y";
54 time = tm();
55 ret = tget.get(iter(iss), end, iss, err, &time,
56 format.data(), format.data()+format.size());
57 VERIFY( err == ios_base::eofbit );
58 VERIFY( ret == end );
59 VERIFY( time.tm_year == 537 - 1900 );
60
61 iss.str(L"68");
62 format = L"%y";
63 time = tm();
64 ret = tget.get(iter(iss), end, iss, err, &time,
65 format.data(), format.data()+format.size());
66 VERIFY( err == ios_base::eofbit );
67 VERIFY( ret == end );
68 VERIFY( time.tm_year == 2068 - 1900 );
69
70 iss.str(L"69");
71 format = L"%y";
72 time = tm();
73 ret = tget.get(iter(iss), end, iss, err, &time,
74 format.data(), format.data()+format.size());
75 VERIFY( err == ios_base::eofbit );
76 VERIFY( ret == end );
77 VERIFY( time.tm_year == 1969 - 1900 );
78
79 iss.str(L"03-Feb-2003");
80 format = L"%d-%b-%Y";
81 time = tm();
82 ret = tget.get(iter(iss), end, iss, err, &time,
83 format.data(), format.data()+format.size());
84 VERIFY( err == ios_base::eofbit );
85 VERIFY( ret == end );
86 VERIFY( time.tm_year == 2003 - 1900 );
87 VERIFY( time.tm_mon == 1 );
88 VERIFY( time.tm_mday == 3 );
89 VERIFY( time.tm_wday == 1 );
90 VERIFY( time.tm_yday == 33 );
91
92 iss.str(L"16-Dec-2020");
93 format = L"%d-%b-%Y";
94 time = tm();
95 ret = tget.get(iter(iss), end, iss, err, &time,
96 format.data(), format.data()+format.size());
97 VERIFY( err == ios_base::eofbit );
98 VERIFY( ret == end );
99 VERIFY( time.tm_year == 2020 - 1900 );
100 VERIFY( time.tm_mon == 11 );
101 VERIFY( time.tm_mday == 16 );
102 VERIFY( time.tm_wday == 3 );
103 VERIFY( time.tm_yday == 350 );
104
105 iss.str(L"16-Dec-2021");
106 format = L"%d-%b-%Y";
107 time = tm();
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_year == 2021 - 1900 );
113 VERIFY( time.tm_mon == 11 );
114 VERIFY( time.tm_mday == 16 );
115 VERIFY( time.tm_wday == 4 );
116 VERIFY( time.tm_yday == 349 );
117
118 iss.str(L"253 2020");
119 format = L"%j %Y";
120 time = tm();
121 ret = tget.get(iter(iss), end, iss, err, &time,
122 format.data(), format.data()+format.size());
123 VERIFY( err == ios_base::eofbit );
124 VERIFY( ret == end );
125 VERIFY( time.tm_year == 2020 - 1900 );
126 VERIFY( time.tm_mon == 8 );
127 VERIFY( time.tm_mday == 9 );
128 VERIFY( time.tm_wday == 3 );
129 VERIFY( time.tm_yday == 252 );
130
131 iss.str(L"233 2021");
132 format = L"%j %Y";
133 time = tm();
134 ret = tget.get(iter(iss), end, iss, err, &time,
135 format.data(), format.data()+format.size());
136 VERIFY( err == ios_base::eofbit );
137 VERIFY( ret == end );
138 VERIFY( time.tm_year == 2021 - 1900 );
139 VERIFY( time.tm_mon == 7 );
140 VERIFY( time.tm_mday == 21 );
141 VERIFY( time.tm_wday == 6 );
142 VERIFY( time.tm_yday == 232 );
143
144 iss.str(L"2020 23 3");
145 format = L"%Y %U %w";
146 time = tm();
147 ret = tget.get(iter(iss), end, iss, err, &time,
148 format.data(), format.data()+format.size());
149 VERIFY( err == ios_base::eofbit );
150 VERIFY( ret == end );
151 VERIFY( time.tm_year == 2020 - 1900 );
152 VERIFY( time.tm_mon == 5 );
153 VERIFY( time.tm_mday == 10 );
154 VERIFY( time.tm_wday == 3 );
155 VERIFY( time.tm_yday == 161 );
156
157 iss.str(L"2020 23 3");
158 format = L"%Y %W %w";
159 time = tm();
160 ret = tget.get(iter(iss), end, iss, err, &time,
161 format.data(), format.data()+format.size());
162 VERIFY( err == ios_base::eofbit );
163 VERIFY( ret == end );
164 VERIFY( time.tm_year == 2020 - 1900 );
165 VERIFY( time.tm_mon == 5 );
166 VERIFY( time.tm_mday == 10 );
167 VERIFY( time.tm_wday == 3 );
168 VERIFY( time.tm_yday == 161 );
169
170 iss.str(L"2021 43 Fri");
171 format = L"%Y %W %a";
172 time = tm();
173 ret = tget.get(iter(iss), end, iss, err, &time,
174 format.data(), format.data()+format.size());
175 VERIFY( err == ios_base::eofbit );
176 VERIFY( ret == end );
177 VERIFY( time.tm_year == 2021 - 1900 );
178 VERIFY( time.tm_mon == 9 );
179 VERIFY( time.tm_mday == 29 );
180 VERIFY( time.tm_wday == 5 );
181 VERIFY( time.tm_yday == 301 );
182
183 iss.str(L"2024 23 3");
184 format = L"%Y %U %w";
185 time = tm();
186 ret = tget.get(iter(iss), end, iss, err, &time,
187 format.data(), format.data()+format.size());
188 VERIFY( err == ios_base::eofbit );
189 VERIFY( ret == end );
190 VERIFY( time.tm_year == 2024 - 1900 );
191 VERIFY( time.tm_mon == 5 );
192 VERIFY( time.tm_mday == 12 );
193 VERIFY( time.tm_wday == 3 );
194 VERIFY( time.tm_yday == 163 );
195
196 iss.str(L"2024 23 3");
197 format = L"%Y %W %w";
198 time = tm();
199 ret = tget.get(iter(iss), end, iss, err, &time,
200 format.data(), format.data()+format.size());
201 VERIFY( err == ios_base::eofbit );
202 VERIFY( ret == end );
203 VERIFY( time.tm_year == 2024 - 1900 );
204 VERIFY( time.tm_mon == 5 );
205 VERIFY( time.tm_mday == 5 );
206 VERIFY( time.tm_wday == 3 );
207 VERIFY( time.tm_yday == 156 );
208
209 // As an extension, parse also 4 digit years.
210 iss.str(L"0068");
211 format = L"%y";
212 time = tm();
213 ret = tget.get(iter(iss), end, iss, err, &time,
214 format.data(), format.data()+format.size());
215 VERIFY( err == ios_base::eofbit );
216 VERIFY( ret == end );
217 VERIFY( time.tm_year == 68 - 1900 );
218
219 iss.str(L"0069");
220 format = L"%y";
221 time = tm();
222 ret = tget.get(iter(iss), end, iss, err, &time,
223 format.data(), format.data()+format.size());
224 VERIFY( err == ios_base::eofbit );
225 VERIFY( ret == end );
226 VERIFY( time.tm_year == 69 - 1900 );
227
228 iss.str(L"1492");
229 format = L"%y";
230 time = tm();
231 ret = tget.get(iter(iss), end, iss, err, &time,
232 format.data(), format.data()+format.size());
233 VERIFY( err == ios_base::eofbit );
234 VERIFY( ret == end );
235 VERIFY( time.tm_year == 1492 - 1900 );
236}
237
238int
239main()
240{
241 test01();
242 return 0;
243}