1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 // UNSUPPORTED: c++03, c++11, c++14, c++17
10 // UNSUPPORTED: no-localization
11 // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
12
13 // TODO FMT This test should not require std::to_chars(floating-point)
14 // XFAIL: availability-fp_to_chars-missing
15
16 // REQUIRES: locale.fr_FR.UTF-8
17 // REQUIRES: locale.ja_JP.UTF-8
18
19 // <chrono>
20
21 // class year_month_day_last;
22
23 // template<class charT, class traits>
24 // basic_ostream<charT, traits>&
25 // operator<<(basic_ostream<charT, traits>& os, const year_month_day_last& ymdl);
26
27 #include <chrono>
28 #include <cassert>
29 #include <sstream>
30
31 #include "make_string.h"
32 #include "platform_support.h" // locale name macros
33 #include "test_macros.h"
34 #include "assert_macros.h"
35 #include "concat_macros.h"
36
37 #define SV(S) MAKE_STRING_VIEW(CharT, S)
38
39 #define TEST_EQUAL(OUT, EXPECTED) \
40 TEST_REQUIRE(OUT == EXPECTED, \
41 TEST_WRITE_CONCATENATED( \
42 "\nExpression ", #OUT, "\nExpected output ", EXPECTED, "\nActual output ", OUT, '\n'));
43
44 template <class CharT>
stream_c_locale(std::chrono::year_month_day_last ymdl)45 static std::basic_string<CharT> stream_c_locale(std::chrono::year_month_day_last ymdl) {
46 std::basic_stringstream<CharT> sstr;
47 sstr << ymdl;
48 return sstr.str();
49 }
50
51 template <class CharT>
stream_fr_FR_locale(std::chrono::year_month_day_last ymdl)52 static std::basic_string<CharT> stream_fr_FR_locale(std::chrono::year_month_day_last ymdl) {
53 std::basic_stringstream<CharT> sstr;
54 const std::locale locale(LOCALE_fr_FR_UTF_8);
55 sstr.imbue(locale);
56 sstr << ymdl;
57 return sstr.str();
58 }
59
60 template <class CharT>
stream_ja_JP_locale(std::chrono::year_month_day_last ymdl)61 static std::basic_string<CharT> stream_ja_JP_locale(std::chrono::year_month_day_last ymdl) {
62 std::basic_stringstream<CharT> sstr;
63 const std::locale locale(LOCALE_ja_JP_UTF_8);
64 sstr.imbue(locale);
65 sstr << ymdl;
66 return sstr.str();
67 }
68
69 template <class CharT>
test()70 static void test() {
71 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
72 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{0}}}),
73 SV("0000/0 is not a valid month/last"));
74 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
75 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
76 SV("-32768 is not a valid year/Jan/last"));
77 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
78 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
79 SV("-32767/Feb/last"));
80 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
81 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
82 SV("0000/Mar/last"));
83 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
84 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
85 SV("1970/Apr/last"));
86 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
87 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
88 SV("32767/May/last"));
89 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
90 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
91 SV("0000/Jun/last"));
92 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
93 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
94 SV("0000/Jul/last"));
95 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
96 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
97 SV("0000/Aug/last"));
98 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
99 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
100 SV("0000/Sep/last"));
101 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
102 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{10}}}),
103 SV("0000/Oct/last"));
104 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
105 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{11}}}),
106 SV("0000/Nov/last"));
107 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
108 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{12}}}),
109 SV("0000/Dec/last"));
110 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
111 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{13}}}),
112 SV("0000/13 is not a valid month/last"));
113 TEST_EQUAL(stream_c_locale<CharT>(std::chrono::year_month_day_last{
114 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{255}}}),
115 SV("-32768 is not a valid year/255 is not a valid month/last"));
116
117 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
118 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{0}}}),
119 SV("0000/0 is not a valid month/last"));
120 #if defined(__APPLE__)
121 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
122 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
123 SV("-32768 is not a valid year/jan/last"));
124 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
125 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
126 SV("-32767/fév/last"));
127 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
128 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
129 SV("0000/mar/last"));
130 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
131 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
132 SV("1970/avr/last"));
133 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
134 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
135 SV("32767/mai/last"));
136 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
137 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
138 SV("0000/jui/last"));
139 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
140 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
141 SV("0000/jul/last"));
142 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
143 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
144 SV("0000/aoû/last"));
145 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
146 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
147 SV("0000/sep/last"));
148 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
149 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{10}}}),
150 SV("0000/oct/last"));
151 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
152 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{11}}}),
153 SV("0000/nov/last"));
154 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
155 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{12}}}),
156 SV("0000/déc/last"));
157 #else // defined(__APPLE__)
158 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
159 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
160 SV("-32768 is not a valid year/janv./last"));
161 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
162 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
163 SV("-32767/févr./last"));
164 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
165 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
166 SV("0000/mars/last"));
167 # if defined(_WIN32) || defined(_AIX) || defined(__FreeBSD__)
168 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
169 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
170 SV("1970/avr./last"));
171 # else // defined(_WIN32) || defined(_AIX) || defined(__FreeBSD__)
172 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
173 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
174 SV("1970/avril/last"));
175 # endif // defined(_WIN32) || defined(_AIX) || defined(__FreeBSD__)
176 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
177 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
178 SV("32767/mai/last"));
179 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
180 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
181 SV("0000/juin/last"));
182 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
183 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
184 SV("0000/juil./last"));
185 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
186 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
187 SV("0000/août/last"));
188 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
189 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
190 SV("0000/sept./last"));
191 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
192 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{10}}}),
193 SV("0000/oct./last"));
194 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
195 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{11}}}),
196 SV("0000/nov./last"));
197 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
198 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{12}}}),
199 SV("0000/déc./last"));
200 #endif // defined(__APPLE__)
201 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
202 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{13}}}),
203 SV("0000/13 is not a valid month/last"));
204 TEST_EQUAL(stream_fr_FR_locale<CharT>(std::chrono::year_month_day_last{
205 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{255}}}),
206 SV("-32768 is not a valid year/255 is not a valid month/last"));
207
208 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
209 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{0}}}),
210 SV("0000/0 is not a valid month/last"));
211 #if defined(__APPLE__) || defined(_WIN32)
212 # if defined(__APPLE__)
213 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
214 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
215 SV("-32768 is not a valid year/ 1/last"));
216 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
217 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
218 SV("-32767/ 2/last"));
219 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
220 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
221 SV("0000/ 3/last"));
222 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
223 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
224 SV("1970/ 4/last"));
225 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
226 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
227 SV("32767/ 5/last"));
228 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
229 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
230 SV("0000/ 6/last"));
231 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
232 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
233 SV("0000/ 7/last"));
234 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
235 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
236 SV("0000/ 8/last"));
237 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
238 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
239 SV("0000/ 9/last"));
240 # else // defined(__APPLE__)
241 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
242 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
243 SV("-32768 is not a valid year/1/last"));
244 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
245 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
246 SV("-32767/2/last"));
247 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
248 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
249 SV("0000/3/last"));
250 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
251 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
252 SV("1970/4/last"));
253 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
254 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
255 SV("32767/5/last"));
256 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
257 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
258 SV("0000/6/last"));
259 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
260 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
261 SV("0000/7/last"));
262 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
263 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
264 SV("0000/8/last"));
265 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
266 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
267 SV("0000/9/last"));
268 # endif // defined(__APPLE__)
269 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
270 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{10}}}),
271 SV("0000/10/last"));
272 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
273 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{11}}}),
274 SV("0000/11/last"));
275 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
276 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{12}}}),
277 SV("0000/12/last"));
278 #else // defined(__APPLE__) || defined(_WIN32)
279 # if defined(_AIX)
280 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
281 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
282 SV("-32768 is not a valid year/1月/last"));
283 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
284 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
285 SV("-32767/2月/last"));
286 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
287 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
288 SV("0000/3月/last"));
289 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
290 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
291 SV("1970/4月/last"));
292 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
293 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
294 SV("32767/5月/last"));
295 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
296 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
297 SV("0000/6月/last"));
298 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
299 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
300 SV("0000/7月/last"));
301 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
302 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
303 SV("0000/8月/last"));
304 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
305 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
306 SV("0000/9月/last"));
307 # else // defined(_AIX)
308 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
309 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{1}}}),
310 SV("-32768 is not a valid year/ 1月/last"));
311 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
312 std::chrono::year{-32'767}, std::chrono::month_day_last{std::chrono::month{2}}}),
313 SV("-32767/ 2月/last"));
314 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
315 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{3}}}),
316 SV("0000/ 3月/last"));
317 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
318 std::chrono::year{1970}, std::chrono::month_day_last{std::chrono::month{4}}}),
319 SV("1970/ 4月/last"));
320 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
321 std::chrono::year{32'767}, std::chrono::month_day_last{std::chrono::month{5}}}),
322 SV("32767/ 5月/last"));
323 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
324 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{6}}}),
325 SV("0000/ 6月/last"));
326 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
327 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{7}}}),
328 SV("0000/ 7月/last"));
329 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
330 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{8}}}),
331 SV("0000/ 8月/last"));
332 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
333 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{9}}}),
334 SV("0000/ 9月/last"));
335 # endif // defined(_AIX)
336 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
337 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{10}}}),
338 SV("0000/10月/last"));
339 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
340 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{11}}}),
341 SV("0000/11月/last"));
342 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
343 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{12}}}),
344 SV("0000/12月/last"));
345 #endif // defined(__APPLE__) || defined(_WIN32)
346 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
347 std::chrono::year{0}, std::chrono::month_day_last{std::chrono::month{13}}}),
348 SV("0000/13 is not a valid month/last"));
349 TEST_EQUAL(stream_ja_JP_locale<CharT>(std::chrono::year_month_day_last{
350 std::chrono::year{-32'768}, std::chrono::month_day_last{std::chrono::month{255}}}),
351 SV("-32768 is not a valid year/255 is not a valid month/last"));
352 }
353
main(int,char **)354 int main(int, char**) {
355 test<char>();
356
357 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
358 test<wchar_t>();
359 #endif
360
361 return 0;
362 }
363