//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: no-localization // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME // TODO FMT This test should not require std::to_chars(floating-point) // XFAIL: availability-fp_to_chars-missing // REQUIRES: locale.fr_FR.UTF-8 // REQUIRES: locale.ja_JP.UTF-8 // // class weekday; // template // basic_ostream& // operator<<(basic_ostream& os, const weekday& wd); #include #include #include #include "make_string.h" #include "platform_support.h" // locale name macros #include "test_macros.h" #define SV(S) MAKE_STRING_VIEW(CharT, S) template static std::basic_string stream_c_locale(std::chrono::weekday weekday) { std::basic_stringstream sstr; sstr << weekday; return sstr.str(); } template static std::basic_string stream_fr_FR_locale(std::chrono::weekday weekday) { std::basic_stringstream sstr; const std::locale locale(LOCALE_fr_FR_UTF_8); sstr.imbue(locale); sstr << weekday; return sstr.str(); } template static std::basic_string stream_ja_JP_locale(std::chrono::weekday weekday) { std::basic_stringstream sstr; const std::locale locale(LOCALE_ja_JP_UTF_8); sstr.imbue(locale); sstr << weekday; return sstr.str(); } template static void test() { assert(stream_c_locale(std::chrono::weekday(0)) == SV("Sun")); assert(stream_c_locale(std::chrono::weekday(1)) == SV("Mon")); assert(stream_c_locale(std::chrono::weekday(2)) == SV("Tue")); assert(stream_c_locale(std::chrono::weekday(3)) == SV("Wed")); assert(stream_c_locale(std::chrono::weekday(4)) == SV("Thu")); assert(stream_c_locale(std::chrono::weekday(5)) == SV("Fri")); assert(stream_c_locale(std::chrono::weekday(6)) == SV("Sat")); assert(stream_c_locale(std::chrono::weekday(7)) == SV("Sun")); assert(stream_c_locale(std::chrono::weekday(8)) == SV("8 is not a valid weekday")); assert(stream_c_locale(std::chrono::weekday(255)) == SV("255 is not a valid weekday")); #if defined(__APPLE__) assert(stream_fr_FR_locale(std::chrono::weekday(0)) == SV("Dim")); assert(stream_fr_FR_locale(std::chrono::weekday(1)) == SV("Lun")); assert(stream_fr_FR_locale(std::chrono::weekday(2)) == SV("Mar")); assert(stream_fr_FR_locale(std::chrono::weekday(3)) == SV("Mer")); assert(stream_fr_FR_locale(std::chrono::weekday(4)) == SV("Jeu")); assert(stream_fr_FR_locale(std::chrono::weekday(5)) == SV("Ven")); assert(stream_fr_FR_locale(std::chrono::weekday(6)) == SV("Sam")); assert(stream_fr_FR_locale(std::chrono::weekday(7)) == SV("Dim")); #else assert(stream_fr_FR_locale(std::chrono::weekday(0)) == SV("dim.")); assert(stream_fr_FR_locale(std::chrono::weekday(1)) == SV("lun.")); assert(stream_fr_FR_locale(std::chrono::weekday(2)) == SV("mar.")); assert(stream_fr_FR_locale(std::chrono::weekday(3)) == SV("mer.")); assert(stream_fr_FR_locale(std::chrono::weekday(4)) == SV("jeu.")); assert(stream_fr_FR_locale(std::chrono::weekday(5)) == SV("ven.")); assert(stream_fr_FR_locale(std::chrono::weekday(6)) == SV("sam.")); assert(stream_fr_FR_locale(std::chrono::weekday(7)) == SV("dim.")); #endif assert(stream_fr_FR_locale(std::chrono::weekday(8)) == SV("8 is not a valid weekday")); assert(stream_fr_FR_locale(std::chrono::weekday(255)) == SV("255 is not a valid weekday")); assert(stream_ja_JP_locale(std::chrono::weekday(0)) == SV("日")); assert(stream_ja_JP_locale(std::chrono::weekday(1)) == SV("月")); assert(stream_ja_JP_locale(std::chrono::weekday(2)) == SV("火")); assert(stream_ja_JP_locale(std::chrono::weekday(3)) == SV("水")); assert(stream_ja_JP_locale(std::chrono::weekday(4)) == SV("木")); assert(stream_ja_JP_locale(std::chrono::weekday(5)) == SV("金")); assert(stream_ja_JP_locale(std::chrono::weekday(6)) == SV("土")); assert(stream_ja_JP_locale(std::chrono::weekday(7)) == SV("日")); assert(stream_ja_JP_locale(std::chrono::weekday(8)) == SV("8 is not a valid weekday")); assert(stream_ja_JP_locale(std::chrono::weekday(255)) == SV("255 is not a valid weekday")); } int main(int, char**) { test(); #ifndef TEST_HAS_NO_WIDE_CHARACTERS test(); #endif return 0; }