11522f190SMark de Wever //===----------------------------------------------------------------------===// 2*6a54dfbfSLouis Dionne // 31522f190SMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41522f190SMark de Wever // See https://llvm.org/LICENSE.txt for license information. 51522f190SMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61522f190SMark de Wever // 71522f190SMark de Wever //===----------------------------------------------------------------------===// 81522f190SMark de Wever 91522f190SMark de Wever // UNSUPPORTED: c++03, c++11, c++14, c++17 101522f190SMark de Wever // UNSUPPORTED: no-localization 11520c7fbbSLouis Dionne // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME 123b00bae9SLouis Dionne 133d334df5SLouis Dionne // TODO FMT This test should not require std::to_chars(floating-point) 14f0fc8c48SLouis Dionne // XFAIL: availability-fp_to_chars-missing 153d334df5SLouis Dionne 161522f190SMark de Wever // REQUIRES: locale.fr_FR.UTF-8 171522f190SMark de Wever // REQUIRES: locale.ja_JP.UTF-8 181522f190SMark de Wever 191522f190SMark de Wever // <chrono> 201522f190SMark de Wever 211522f190SMark de Wever // template<class charT> struct formatter<chrono::month, charT>; 221522f190SMark de Wever 231522f190SMark de Wever #include <chrono> 241522f190SMark de Wever #include <format> 251522f190SMark de Wever 261522f190SMark de Wever #include <cassert> 271522f190SMark de Wever #include <concepts> 281522f190SMark de Wever #include <locale> 291522f190SMark de Wever #include <iostream> 301522f190SMark de Wever #include <type_traits> 311522f190SMark de Wever 321522f190SMark de Wever #include "formatter_tests.h" 331522f190SMark de Wever #include "make_string.h" 341522f190SMark de Wever #include "platform_support.h" // locale name macros 351522f190SMark de Wever #include "string_literal.h" 361522f190SMark de Wever #include "test_macros.h" 371522f190SMark de Wever 381522f190SMark de Wever template <class CharT> 391522f190SMark de Wever static void test_no_chrono_specs() { 401522f190SMark de Wever // Valid month 411522f190SMark de Wever check(SV("Jan"), SV("{}"), std::chrono::month{1}); 421522f190SMark de Wever check(SV("*Jan*"), SV("{:*^5}"), std::chrono::month{1}); 431522f190SMark de Wever check(SV("*Jan"), SV("{:*>4}"), std::chrono::month{1}); 441522f190SMark de Wever 451522f190SMark de Wever // Invalid month 461522f190SMark de Wever check(SV("0 is not a valid month"), SV("{}"), std::chrono::month{0}); 471522f190SMark de Wever check(SV("*0 is not a valid month*"), SV("{:*^24}"), std::chrono::month{0}); 481522f190SMark de Wever } 491522f190SMark de Wever 501522f190SMark de Wever template <class CharT> 511522f190SMark de Wever static void test_valid_values() { 521522f190SMark de Wever // Test that %b, %h, and %B throw an exception. 53402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%b}"), std::chrono::month{200}); 54402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%b}"), std::chrono::month{13}); 55402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%b}"), std::chrono::month{255}); 561522f190SMark de Wever 57402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%h}"), std::chrono::month{0}); 58402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%h}"), std::chrono::month{13}); 59402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%h}"), std::chrono::month{255}); 601522f190SMark de Wever 61402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%B}"), std::chrono::month{0}); 62402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%B}"), std::chrono::month{13}); 63402eb2efSMark de Wever check_exception("Formatting a month name from an invalid month number", SV("{:%B}"), std::chrono::month{255}); 641522f190SMark de Wever 651522f190SMark de Wever constexpr std::basic_string_view<CharT> fmt = SV("{:%%b='%b'%t%%B='%B'%t%%h='%h'%t%%m='%m'%t%%Om='%Om'%n}"); 661522f190SMark de Wever constexpr std::basic_string_view<CharT> lfmt = SV("{:L%%b='%b'%t%%B='%B'%t%%h='%h'%t%%m='%m'%t%%Om='%Om'%n}"); 671522f190SMark de Wever 681522f190SMark de Wever const std::locale loc(LOCALE_ja_JP_UTF_8); 691522f190SMark de Wever std::locale::global(std::locale(LOCALE_fr_FR_UTF_8)); 701522f190SMark de Wever 711522f190SMark de Wever // Non localized output using C-locale 721522f190SMark de Wever check(SV("%b='Jan'\t%B='January'\t%h='Jan'\t%m='01'\t%Om='01'\n"), fmt, std::chrono::January); 731522f190SMark de Wever check(SV("%b='Feb'\t%B='February'\t%h='Feb'\t%m='02'\t%Om='02'\n"), fmt, std::chrono::February); 741522f190SMark de Wever check(SV("%b='Mar'\t%B='March'\t%h='Mar'\t%m='03'\t%Om='03'\n"), fmt, std::chrono::March); 751522f190SMark de Wever check(SV("%b='Apr'\t%B='April'\t%h='Apr'\t%m='04'\t%Om='04'\n"), fmt, std::chrono::April); 761522f190SMark de Wever check(SV("%b='May'\t%B='May'\t%h='May'\t%m='05'\t%Om='05'\n"), fmt, std::chrono::May); 771522f190SMark de Wever check(SV("%b='Jun'\t%B='June'\t%h='Jun'\t%m='06'\t%Om='06'\n"), fmt, std::chrono::June); 781522f190SMark de Wever check(SV("%b='Jul'\t%B='July'\t%h='Jul'\t%m='07'\t%Om='07'\n"), fmt, std::chrono::July); 791522f190SMark de Wever check(SV("%b='Aug'\t%B='August'\t%h='Aug'\t%m='08'\t%Om='08'\n"), fmt, std::chrono::August); 801522f190SMark de Wever check(SV("%b='Sep'\t%B='September'\t%h='Sep'\t%m='09'\t%Om='09'\n"), fmt, std::chrono::September); 811522f190SMark de Wever check(SV("%b='Oct'\t%B='October'\t%h='Oct'\t%m='10'\t%Om='10'\n"), fmt, std::chrono::October); 821522f190SMark de Wever check(SV("%b='Nov'\t%B='November'\t%h='Nov'\t%m='11'\t%Om='11'\n"), fmt, std::chrono::November); 831522f190SMark de Wever check(SV("%b='Dec'\t%B='December'\t%h='Dec'\t%m='12'\t%Om='12'\n"), fmt, std::chrono::December); 841522f190SMark de Wever 851522f190SMark de Wever // Use the global locale (fr_FR) 861522f190SMark de Wever #if defined(__APPLE__) 871522f190SMark de Wever check(SV("%b='jan'\t%B='janvier'\t%h='jan'\t%m='01'\t%Om='01'\n"), lfmt, std::chrono::January); 881522f190SMark de Wever check(SV("%b='fév'\t%B='février'\t%h='fév'\t%m='02'\t%Om='02'\n"), lfmt, std::chrono::February); 891522f190SMark de Wever check(SV("%b='mar'\t%B='mars'\t%h='mar'\t%m='03'\t%Om='03'\n"), lfmt, std::chrono::March); 901522f190SMark de Wever check(SV("%b='avr'\t%B='avril'\t%h='avr'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 911522f190SMark de Wever check(SV("%b='mai'\t%B='mai'\t%h='mai'\t%m='05'\t%Om='05'\n"), lfmt, std::chrono::May); 921522f190SMark de Wever check(SV("%b='jui'\t%B='juin'\t%h='jui'\t%m='06'\t%Om='06'\n"), lfmt, std::chrono::June); 931522f190SMark de Wever check(SV("%b='jul'\t%B='juillet'\t%h='jul'\t%m='07'\t%Om='07'\n"), lfmt, std::chrono::July); 941522f190SMark de Wever check(SV("%b='aoû'\t%B='août'\t%h='aoû'\t%m='08'\t%Om='08'\n"), lfmt, std::chrono::August); 951522f190SMark de Wever check(SV("%b='sep'\t%B='septembre'\t%h='sep'\t%m='09'\t%Om='09'\n"), lfmt, std::chrono::September); 961522f190SMark de Wever check(SV("%b='oct'\t%B='octobre'\t%h='oct'\t%m='10'\t%Om='10'\n"), lfmt, std::chrono::October); 971522f190SMark de Wever check(SV("%b='nov'\t%B='novembre'\t%h='nov'\t%m='11'\t%Om='11'\n"), lfmt, std::chrono::November); 981522f190SMark de Wever check(SV("%b='déc'\t%B='décembre'\t%h='déc'\t%m='12'\t%Om='12'\n"), lfmt, std::chrono::December); 991522f190SMark de Wever #else // defined(__APPLE__) 1001522f190SMark de Wever check(SV("%b='janv.'\t%B='janvier'\t%h='janv.'\t%m='01'\t%Om='01'\n"), lfmt, std::chrono::January); 1011522f190SMark de Wever check(SV("%b='févr.'\t%B='février'\t%h='févr.'\t%m='02'\t%Om='02'\n"), lfmt, std::chrono::February); 1021522f190SMark de Wever check(SV("%b='mars'\t%B='mars'\t%h='mars'\t%m='03'\t%Om='03'\n"), lfmt, std::chrono::March); 1038f01029bSMark de Wever # if defined(_WIN32) || defined(_AIX) || defined(__FreeBSD__) 1041522f190SMark de Wever check(SV("%b='avr.'\t%B='avril'\t%h='avr.'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 1051522f190SMark de Wever # else 1061522f190SMark de Wever check(SV("%b='avril'\t%B='avril'\t%h='avril'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 1071522f190SMark de Wever # endif 1081522f190SMark de Wever check(SV("%b='mai'\t%B='mai'\t%h='mai'\t%m='05'\t%Om='05'\n"), lfmt, std::chrono::May); 1091522f190SMark de Wever check(SV("%b='juin'\t%B='juin'\t%h='juin'\t%m='06'\t%Om='06'\n"), lfmt, std::chrono::June); 1101522f190SMark de Wever check(SV("%b='juil.'\t%B='juillet'\t%h='juil.'\t%m='07'\t%Om='07'\n"), lfmt, std::chrono::July); 1111522f190SMark de Wever check(SV("%b='août'\t%B='août'\t%h='août'\t%m='08'\t%Om='08'\n"), lfmt, std::chrono::August); 1121522f190SMark de Wever check(SV("%b='sept.'\t%B='septembre'\t%h='sept.'\t%m='09'\t%Om='09'\n"), lfmt, std::chrono::September); 1131522f190SMark de Wever check(SV("%b='oct.'\t%B='octobre'\t%h='oct.'\t%m='10'\t%Om='10'\n"), lfmt, std::chrono::October); 1141522f190SMark de Wever check(SV("%b='nov.'\t%B='novembre'\t%h='nov.'\t%m='11'\t%Om='11'\n"), lfmt, std::chrono::November); 1151522f190SMark de Wever check(SV("%b='déc.'\t%B='décembre'\t%h='déc.'\t%m='12'\t%Om='12'\n"), lfmt, std::chrono::December); 1161522f190SMark de Wever #endif // defined(__APPLE__) 1171522f190SMark de Wever 1181522f190SMark de Wever // Use supplied locale (ja_JP) 1191522f190SMark de Wever #if defined(_WIN32) 1201522f190SMark de Wever check(loc, SV("%b='1'\t%B='1月'\t%h='1'\t%m='01'\t%Om='01'\n"), lfmt, std::chrono::January); 1211522f190SMark de Wever check(loc, SV("%b='2'\t%B='2月'\t%h='2'\t%m='02'\t%Om='02'\n"), lfmt, std::chrono::February); 1221522f190SMark de Wever check(loc, SV("%b='3'\t%B='3月'\t%h='3'\t%m='03'\t%Om='03'\n"), lfmt, std::chrono::March); 1231522f190SMark de Wever check(loc, SV("%b='4'\t%B='4月'\t%h='4'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 1241522f190SMark de Wever check(loc, SV("%b='5'\t%B='5月'\t%h='5'\t%m='05'\t%Om='05'\n"), lfmt, std::chrono::May); 1251522f190SMark de Wever check(loc, SV("%b='6'\t%B='6月'\t%h='6'\t%m='06'\t%Om='06'\n"), lfmt, std::chrono::June); 1261522f190SMark de Wever check(loc, SV("%b='7'\t%B='7月'\t%h='7'\t%m='07'\t%Om='07'\n"), lfmt, std::chrono::July); 1271522f190SMark de Wever check(loc, SV("%b='8'\t%B='8月'\t%h='8'\t%m='08'\t%Om='08'\n"), lfmt, std::chrono::August); 1281522f190SMark de Wever check(loc, SV("%b='9'\t%B='9月'\t%h='9'\t%m='09'\t%Om='09'\n"), lfmt, std::chrono::September); 1291522f190SMark de Wever check(loc, SV("%b='10'\t%B='10月'\t%h='10'\t%m='10'\t%Om='10'\n"), lfmt, std::chrono::October); 1301522f190SMark de Wever check(loc, SV("%b='11'\t%B='11月'\t%h='11'\t%m='11'\t%Om='11'\n"), lfmt, std::chrono::November); 1311522f190SMark de Wever check(loc, SV("%b='12'\t%B='12月'\t%h='12'\t%m='12'\t%Om='12'\n"), lfmt, std::chrono::December); 1321522f190SMark de Wever #elif defined(_AIX) // defined(_WIN32) 1331522f190SMark de Wever check(loc, SV("%b='1月'\t%B='1月'\t%h='1月'\t%m='01'\t%Om='01'\n"), lfmt, std::chrono::January); 1341522f190SMark de Wever check(loc, SV("%b='2月'\t%B='2月'\t%h='2月'\t%m='02'\t%Om='02'\n"), lfmt, std::chrono::February); 1351522f190SMark de Wever check(loc, SV("%b='3月'\t%B='3月'\t%h='3月'\t%m='03'\t%Om='03'\n"), lfmt, std::chrono::March); 1361522f190SMark de Wever check(loc, SV("%b='4月'\t%B='4月'\t%h='4月'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 1371522f190SMark de Wever check(loc, SV("%b='5月'\t%B='5月'\t%h='5月'\t%m='05'\t%Om='05'\n"), lfmt, std::chrono::May); 1381522f190SMark de Wever check(loc, SV("%b='6月'\t%B='6月'\t%h='6月'\t%m='06'\t%Om='06'\n"), lfmt, std::chrono::June); 1391522f190SMark de Wever check(loc, SV("%b='7月'\t%B='7月'\t%h='7月'\t%m='07'\t%Om='07'\n"), lfmt, std::chrono::July); 1401522f190SMark de Wever check(loc, SV("%b='8月'\t%B='8月'\t%h='8月'\t%m='08'\t%Om='08'\n"), lfmt, std::chrono::August); 1411522f190SMark de Wever check(loc, SV("%b='9月'\t%B='9月'\t%h='9月'\t%m='09'\t%Om='09'\n"), lfmt, std::chrono::September); 1421522f190SMark de Wever check(loc, SV("%b='10月'\t%B='10月'\t%h='10月'\t%m='10'\t%Om='10'\n"), lfmt, std::chrono::October); 1431522f190SMark de Wever check(loc, SV("%b='11月'\t%B='11月'\t%h='11月'\t%m='11'\t%Om='11'\n"), lfmt, std::chrono::November); 1441522f190SMark de Wever check(loc, SV("%b='12月'\t%B='12月'\t%h='12月'\t%m='12'\t%Om='12'\n"), lfmt, std::chrono::December); 1458f01029bSMark de Wever #elif defined(__FreeBSD__) // defined(_WIN32) 1468f01029bSMark de Wever check(loc, SV("%b=' 1月'\t%B='1月'\t%h=' 1月'\t%m='01'\t%Om='01'\n"), lfmt, std::chrono::January); 1478f01029bSMark de Wever check(loc, SV("%b=' 2月'\t%B='2月'\t%h=' 2月'\t%m='02'\t%Om='02'\n"), lfmt, std::chrono::February); 1488f01029bSMark de Wever check(loc, SV("%b=' 3月'\t%B='3月'\t%h=' 3月'\t%m='03'\t%Om='03'\n"), lfmt, std::chrono::March); 1498f01029bSMark de Wever check(loc, SV("%b=' 4月'\t%B='4月'\t%h=' 4月'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 1508f01029bSMark de Wever check(loc, SV("%b=' 5月'\t%B='5月'\t%h=' 5月'\t%m='05'\t%Om='05'\n"), lfmt, std::chrono::May); 1518f01029bSMark de Wever check(loc, SV("%b=' 6月'\t%B='6月'\t%h=' 6月'\t%m='06'\t%Om='06'\n"), lfmt, std::chrono::June); 1528f01029bSMark de Wever check(loc, SV("%b=' 7月'\t%B='7月'\t%h=' 7月'\t%m='07'\t%Om='07'\n"), lfmt, std::chrono::July); 1538f01029bSMark de Wever check(loc, SV("%b=' 8月'\t%B='8月'\t%h=' 8月'\t%m='08'\t%Om='08'\n"), lfmt, std::chrono::August); 1548f01029bSMark de Wever check(loc, SV("%b=' 9月'\t%B='9月'\t%h=' 9月'\t%m='09'\t%Om='09'\n"), lfmt, std::chrono::September); 1558f01029bSMark de Wever check(loc, SV("%b='10月'\t%B='10月'\t%h='10月'\t%m='10'\t%Om='10'\n"), lfmt, std::chrono::October); 1568f01029bSMark de Wever check(loc, SV("%b='11月'\t%B='11月'\t%h='11月'\t%m='11'\t%Om='11'\n"), lfmt, std::chrono::November); 1578f01029bSMark de Wever check(loc, SV("%b='12月'\t%B='12月'\t%h='12月'\t%m='12'\t%Om='12'\n"), lfmt, std::chrono::December); 1581522f190SMark de Wever #elif defined(__APPLE__) // defined(_WIN32) 1591522f190SMark de Wever check(loc, SV("%b=' 1'\t%B='1月'\t%h=' 1'\t%m='01'\t%Om='01'\n"), lfmt, std::chrono::January); 1601522f190SMark de Wever check(loc, SV("%b=' 2'\t%B='2月'\t%h=' 2'\t%m='02'\t%Om='02'\n"), lfmt, std::chrono::February); 1611522f190SMark de Wever check(loc, SV("%b=' 3'\t%B='3月'\t%h=' 3'\t%m='03'\t%Om='03'\n"), lfmt, std::chrono::March); 1621522f190SMark de Wever check(loc, SV("%b=' 4'\t%B='4月'\t%h=' 4'\t%m='04'\t%Om='04'\n"), lfmt, std::chrono::April); 1631522f190SMark de Wever check(loc, SV("%b=' 5'\t%B='5月'\t%h=' 5'\t%m='05'\t%Om='05'\n"), lfmt, std::chrono::May); 1641522f190SMark de Wever check(loc, SV("%b=' 6'\t%B='6月'\t%h=' 6'\t%m='06'\t%Om='06'\n"), lfmt, std::chrono::June); 1651522f190SMark de Wever check(loc, SV("%b=' 7'\t%B='7月'\t%h=' 7'\t%m='07'\t%Om='07'\n"), lfmt, std::chrono::July); 1661522f190SMark de Wever check(loc, SV("%b=' 8'\t%B='8月'\t%h=' 8'\t%m='08'\t%Om='08'\n"), lfmt, std::chrono::August); 1671522f190SMark de Wever check(loc, SV("%b=' 9'\t%B='9月'\t%h=' 9'\t%m='09'\t%Om='09'\n"), lfmt, std::chrono::September); 1681522f190SMark de Wever check(loc, SV("%b='10'\t%B='10月'\t%h='10'\t%m='10'\t%Om='10'\n"), lfmt, std::chrono::October); 1691522f190SMark de Wever check(loc, SV("%b='11'\t%B='11月'\t%h='11'\t%m='11'\t%Om='11'\n"), lfmt, std::chrono::November); 1701522f190SMark de Wever check(loc, SV("%b='12'\t%B='12月'\t%h='12'\t%m='12'\t%Om='12'\n"), lfmt, std::chrono::December); 1711522f190SMark de Wever #else // defined(_WIN32) 1721522f190SMark de Wever check(loc, SV("%b=' 1月'\t%B='1月'\t%h=' 1月'\t%m='01'\t%Om='一'\n"), lfmt, std::chrono::January); 1731522f190SMark de Wever check(loc, SV("%b=' 2月'\t%B='2月'\t%h=' 2月'\t%m='02'\t%Om='二'\n"), lfmt, std::chrono::February); 1741522f190SMark de Wever check(loc, SV("%b=' 3月'\t%B='3月'\t%h=' 3月'\t%m='03'\t%Om='三'\n"), lfmt, std::chrono::March); 1751522f190SMark de Wever check(loc, SV("%b=' 4月'\t%B='4月'\t%h=' 4月'\t%m='04'\t%Om='四'\n"), lfmt, std::chrono::April); 1761522f190SMark de Wever check(loc, SV("%b=' 5月'\t%B='5月'\t%h=' 5月'\t%m='05'\t%Om='五'\n"), lfmt, std::chrono::May); 1771522f190SMark de Wever check(loc, SV("%b=' 6月'\t%B='6月'\t%h=' 6月'\t%m='06'\t%Om='六'\n"), lfmt, std::chrono::June); 1781522f190SMark de Wever check(loc, SV("%b=' 7月'\t%B='7月'\t%h=' 7月'\t%m='07'\t%Om='七'\n"), lfmt, std::chrono::July); 1791522f190SMark de Wever check(loc, SV("%b=' 8月'\t%B='8月'\t%h=' 8月'\t%m='08'\t%Om='八'\n"), lfmt, std::chrono::August); 1801522f190SMark de Wever check(loc, SV("%b=' 9月'\t%B='9月'\t%h=' 9月'\t%m='09'\t%Om='九'\n"), lfmt, std::chrono::September); 1811522f190SMark de Wever check(loc, SV("%b='10月'\t%B='10月'\t%h='10月'\t%m='10'\t%Om='十'\n"), lfmt, std::chrono::October); 1821522f190SMark de Wever check(loc, SV("%b='11月'\t%B='11月'\t%h='11月'\t%m='11'\t%Om='十一'\n"), lfmt, std::chrono::November); 1831522f190SMark de Wever check(loc, SV("%b='12月'\t%B='12月'\t%h='12月'\t%m='12'\t%Om='十二'\n"), lfmt, std::chrono::December); 1841522f190SMark de Wever #endif // defined(_WIN32) 1851522f190SMark de Wever 1861522f190SMark de Wever std::locale::global(std::locale::classic()); 1871522f190SMark de Wever } 1881522f190SMark de Wever 1891522f190SMark de Wever template <class CharT> 1901522f190SMark de Wever static void test() { 1911522f190SMark de Wever test_no_chrono_specs<CharT>(); 1921522f190SMark de Wever test_valid_values<CharT>(); 1931522f190SMark de Wever check_invalid_types<CharT>({SV("b"), SV("B"), SV("h"), SV("m"), SV("Om")}, std::chrono::January); 1941522f190SMark de Wever 195402eb2efSMark de Wever check_exception("The format specifier expects a '%' or a '}'", SV("{:A"), std::chrono::January); 196402eb2efSMark de Wever check_exception("The chrono specifiers contain a '{'", SV("{:%%{"), std::chrono::January); 197402eb2efSMark de Wever check_exception("End of input while parsing a conversion specifier", SV("{:%"), std::chrono::January); 1981522f190SMark de Wever check_exception("End of input while parsing the modifier E", SV("{:%E"), std::chrono::January); 1991522f190SMark de Wever check_exception("End of input while parsing the modifier O", SV("{:%O"), std::chrono::January); 2001522f190SMark de Wever 2011522f190SMark de Wever // Precision not allowed 202402eb2efSMark de Wever check_exception("The format specifier expects a '%' or a '}'", SV("{:.3}"), std::chrono::January); 2031522f190SMark de Wever } 2041522f190SMark de Wever 2051522f190SMark de Wever int main(int, char**) { 2061522f190SMark de Wever test<char>(); 2071522f190SMark de Wever 2081522f190SMark de Wever #ifndef TEST_HAS_NO_WIDE_CHARACTERS 2091522f190SMark de Wever test<wchar_t>(); 2101522f190SMark de Wever #endif 2111522f190SMark de Wever 2121522f190SMark de Wever return 0; 2131522f190SMark de Wever } 214