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