Simplfy dg-options in format/debug.cc, by not configuring wide encoding.
Address TODO in format_kind.cc, by adding test for format_kind::map.

libstdc++-v3/ChangeLog:

        * testsuite/std/format/ranges/format_kind.cc: Add test for
        range_format::map.
        * testsuite/std/format/debug.cc: Guard wchar_t usages with
        _GLIBCXX_USE_WCHAR_T and simplify dg-options.
        * testsuite/std/format/ranges/adaptors.cc: Guard wchar_t
        usages with _GLIBCXX_USE_WCHAR_T.
        * testsuite/std/format/ranges/formatter.cc: Likewise.
        * testsuite/std/format/ranges/string.cc: Likewise.
        * testsuite/std/format/ranges/map.cc: Likewise and removed
        unused is_format_string_for for wchar_t.
        * testsuite/std/format/ranges/sequence.cc: Likewise with
        removal.
        * testsuite/std/format/tuple.cc: Likewise with removal.
---
Tested with x86_64-linux both with and without --disable-wchar_t.
There are more failing testcases in format directory, but I this
one were easier to adjust as they template on wchar_t.

OK for trunk? 

 libstdc++-v3/testsuite/std/format/debug.cc    | 69 +++++++++++--------
 .../testsuite/std/format/ranges/adaptors.cc   |  2 +
 .../std/format/ranges/format_kind.cc          |  4 +-
 .../testsuite/std/format/ranges/formatter.cc  |  6 +-
 .../testsuite/std/format/ranges/map.cc        | 14 +---
 .../testsuite/std/format/ranges/sequence.cc   | 16 ++---
 .../testsuite/std/format/ranges/string.cc     | 14 ++--
 libstdc++-v3/testsuite/std/format/tuple.cc    | 17 ++---
 8 files changed, 69 insertions(+), 73 deletions(-)

diff --git a/libstdc++-v3/testsuite/std/format/debug.cc 
b/libstdc++-v3/testsuite/std/format/debug.cc
index 965b4dfbebc..0ce9801b784 100644
--- a/libstdc++-v3/testsuite/std/format/debug.cc
+++ b/libstdc++-v3/testsuite/std/format/debug.cc
@@ -1,5 +1,4 @@
-// { dg-options "-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32LE 
-DUNICODE_ENC" { target le } }
-// { dg-options "-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32BE 
-DUNICODE_ENC" { target be } }
+// { dg-options "-fexec-charset=UTF-8 -DUNICODE_ENC" }
 // { dg-do run { target c++23 } }
 // { dg-require-effective-target 4byte_wchar_t }
 // { dg-add-options no_pch }
@@ -12,18 +11,19 @@ std::string
 fdebug(char t)
 { return std::format("{:?}", t); }
 
-std::wstring
-fdebug(wchar_t t)
-{ return std::format(L"{:?}", t); }
-
 std::string
 fdebug(std::string_view t)
 { return std::format("{:?}", t); }
 
+#ifdef _GLIBCXX_USE_WCHAR_T
 std::wstring
-fdebug(std::wstring_view t)
+fdebug(wchar_t t)
 { return std::format(L"{:?}", t); }
 
+std::wstring
+fdebug(std::wstring_view t)
+{ return std::format(L"{:?}", t); }
+#endif // _GLIBCXX_USE_WCHAR_T
 
 #define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S)
 #define WIDEN(S) WIDEN_(_CharT, S)
@@ -244,27 +244,31 @@ test_ill_formed_utf8_seq()
 #endif // UNICODE_ENC
 }
 
+template<typename _CharT>
 void
 test_ill_formed_utf32()
 {
 #if UNICODE_ENC
-  std::wstring res;
+  if constexpr (sizeof(_CharT) >= 4)
+  {
+    std::basic_string<_CharT> res;
 
-  wchar_t ic1 = static_cast<wchar_t>(0xff'ffff);
-  res = fdebug(ic1);
-  VERIFY( res == LR"('\x{ffffff}')" );
+    _CharT ic1 = static_cast<_CharT>(0xff'ffff);
+    res = fdebug(ic1);
+    VERIFY( res == WIDEN(R"('\x{ffffff}')") );
 
-  std::wstring is1(1, ic1);
-  res = fdebug(is1);
-  VERIFY( res == LR"("\x{ffffff}")" );
+    std::basic_string<_CharT> is1(1, ic1);
+    res = fdebug(is1);
+    VERIFY( res == WIDEN(R"("\x{ffffff}")") );
 
-  wchar_t ic2 = static_cast<wchar_t>(0xffff'ffff);
-  res = fdebug(ic2);
-  VERIFY( res == LR"('\x{ffffffff}')" );
+    _CharT ic2 = static_cast<_CharT>(0xffff'ffff);
+    res = fdebug(ic2);
+    VERIFY( res == WIDEN(R"('\x{ffffffff}')") );
 
-  std::wstring is2(1, ic2);
-  res = fdebug(is2);
-  VERIFY( res == LR"("\x{ffffffff}")" );
+    std::basic_string<_CharT> is2(1, ic2);
+    res = fdebug(is2);
+    VERIFY( res == WIDEN(R"("\x{ffffffff}")") );
+  }
 #endif // UNICODE_ENC
 }
 
@@ -810,34 +814,41 @@ void
 test_formatters_c()
 {
   test_formatters<char>();
+#ifdef _GLIBCXX_USE_WCHAR_T
   test_formatters<wchar_t>();
   test_formatter_char<wchar_t, char>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
 
 int main()
 {
   test_basic_escapes<char>();
-  test_basic_escapes<wchar_t>();
   test_ascii_escapes<char>();
-  test_ascii_escapes<wchar_t>();
   test_extended_ascii<char>();
-  test_extended_ascii<wchar_t>();
 
   test_unicode_escapes<char>();
-  test_unicode_escapes<wchar_t>();
   test_grapheme_extend<char>();
-  test_grapheme_extend<wchar_t>();
   test_replacement_char<char>();
-  test_replacement_char<wchar_t>();
   test_ill_formed_utf8_seq();
-  test_ill_formed_utf32();
 
   test_fill<char>();
-  test_fill<wchar_t>();
   test_prec<char>();
-  test_prec<wchar_t>();
 
   test_padding();
 
   test_formatters_c();
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+  test_basic_escapes<wchar_t>();
+  test_ascii_escapes<wchar_t>();
+  test_extended_ascii<wchar_t>();
+
+  test_unicode_escapes<wchar_t>();
+  test_grapheme_extend<wchar_t>();
+  test_replacement_char<wchar_t>();
+  test_ill_formed_utf32<wchar_t>();
+
+  test_fill<wchar_t>();
+  test_prec<wchar_t>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
diff --git a/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc 
b/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc
index daa73aa39bf..6f885e65789 100644
--- a/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc
+++ b/libstdc++-v3/testsuite/std/format/ranges/adaptors.cc
@@ -129,7 +129,9 @@ test_adaptor()
 {
   test_format_string<Adaptor>();
   test_output<char, Adaptor>();
+#ifdef _GLIBCXX_USE_WCHAR_T
   test_output<wchar_t, Adaptor>();
+#endif // _GLIBCXX_USE_WCHAR_T
 
   static_assert(!std::formattable<Adaptor<int>, int>);
   static_assert(!std::formattable<Adaptor<int>, char32_t>);
diff --git a/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc 
b/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc
index 14b9ff20c21..1450fbaebc5 100644
--- a/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc
+++ b/libstdc++-v3/testsuite/std/format/ranges/format_kind.cc
@@ -75,7 +75,9 @@ void test_override()
   CustFormat<int, std::range_format::set> setf{1, 2, 3};
   VERIFY( std::format("{}", setf) == "{1, 2, 3}" );
 
-  // TODO test map once formatter for pair is implenented
+  CustFormat<std::pair<int, int>, std::range_format::map> mapf
+  {{1, 11}, {2, 22}, {3, 33}};
+  VERIFY( std::format("{}", mapf) == "{1: 11, 2: 22, 3: 33}" );
 
   CustFormat<char, std::range_format::string> stringf{'a', 'b', 'c', 'd'};
   VERIFY( std::format("{}", stringf) == "abcd" );
diff --git a/libstdc++-v3/testsuite/std/format/ranges/formatter.cc 
b/libstdc++-v3/testsuite/std/format/ranges/formatter.cc
index 00ce9f6dd0c..4b2fcb5db59 100644
--- a/libstdc++-v3/testsuite/std/format/ranges/formatter.cc
+++ b/libstdc++-v3/testsuite/std/format/ranges/formatter.cc
@@ -118,9 +118,11 @@ template<template<typename, typename> class Formatter>
 void test_outputs()
 {
   test_default<char, Formatter>();
-  test_default<wchar_t, Formatter>();
   test_override<char, Formatter>();
+#ifdef _GLIBCXX_USE_WCHAR_T
+  test_default<wchar_t, Formatter>();
   test_override<wchar_t, Formatter>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
 
 void
@@ -146,7 +148,7 @@ struct MyFlatMap : std::flat_map<int, int>
 
 template<typename CharT>
 struct std::formatter<MyFlatMap, CharT>
-  // This cannot apply format BitVector const&, because formatted type would
+  // This cannot apply format MyFlatMap const&, because formatted type would
   // be std::pair<int const&, int const&>, and formatter for
   // pair<int const&, int> cannot format it.
   : std::range_formatter<MyFlatMap::reference>
diff --git a/libstdc++-v3/testsuite/std/format/ranges/map.cc 
b/libstdc++-v3/testsuite/std/format/ranges/map.cc
index 1838480e2cf..1089b2fd8f9 100644
--- a/libstdc++-v3/testsuite/std/format/ranges/map.cc
+++ b/libstdc++-v3/testsuite/std/format/ranges/map.cc
@@ -30,18 +30,6 @@ is_format_string_for(const char* str, Args&&... args)
   }
 }
 
-template<typename... Args>
-bool
-is_format_string_for(const wchar_t* str, Args&&... args)
-{
-  try {
-    (void) std::vformat(str, std::make_wformat_args(args...));
-    return true;
-  } catch (const std::format_error&) {
-    return false;
-  }
-}
-
 template<typename Rg, typename CharT>
 bool is_range_formatter_spec_for(CharT const* spec, Rg&& rg)
 {
@@ -153,7 +141,9 @@ template<class Range>
 void test_output_c(bool mapIsDefault = false)
 {
   test_output<char, Range>(mapIsDefault);
+#ifdef _GLIBCXX_USE_WCHAR_T
   test_output<wchar_t, Range>(mapIsDefault);
+#endif // _GLIBCXX_USE_WCHAR_T
 }
 
 template<template<typename> class RangeT>
diff --git a/libstdc++-v3/testsuite/std/format/ranges/sequence.cc 
b/libstdc++-v3/testsuite/std/format/ranges/sequence.cc
index 32242860f10..f252a788dbd 100644
--- a/libstdc++-v3/testsuite/std/format/ranges/sequence.cc
+++ b/libstdc++-v3/testsuite/std/format/ranges/sequence.cc
@@ -30,18 +30,6 @@ is_format_string_for(const char* str, Args&&... args)
   }
 }
 
-template<typename... Args>
-bool
-is_format_string_for(const wchar_t* str, Args&&... args)
-{
-  try {
-    (void) std::vformat(str, std::make_wformat_args(args...));
-    return true;
-  } catch (const std::format_error&) {
-    return false;
-  }
-}
-
 template<typename Rg, typename CharT>
 bool is_range_formatter_spec_for(CharT const* spec, Rg&& rg)
 {
@@ -156,14 +144,18 @@ template<typename Cont>
 void test_output_cont()
 {
   test_output<char, Cont&, Cont>();
+#ifdef _GLIBCXX_USE_WCHAR_T
   test_output<wchar_t, Cont const&, Cont>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
 
 template<typename View>
 void test_output_view()
 {
   test_output<char, View, int[3]>();
+#ifdef _GLIBCXX_USE_WCHAR_T
   test_output<wchar_t, View, int[3]>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
 
 void
diff --git a/libstdc++-v3/testsuite/std/format/ranges/string.cc 
b/libstdc++-v3/testsuite/std/format/ranges/string.cc
index cebdd530168..1b2bfef6fee 100644
--- a/libstdc++-v3/testsuite/std/format/ranges/string.cc
+++ b/libstdc++-v3/testsuite/std/format/ranges/string.cc
@@ -21,6 +21,7 @@ is_format_string_for(const char* str, Args&&... args)
   }
 }
 
+#ifdef _GLIBCXX_USE_WCHAR_T
 template<typename... Args>
 bool
 is_format_string_for(const wchar_t* str, Args&&... args)
@@ -32,6 +33,7 @@ is_format_string_for(const wchar_t* str, Args&&... args)
     return false;
   }
 }
+#endif // _GLIBCXX_USE_WCHAR_T
 
 template<typename Rg, typename CharT>
 bool is_range_formatter_spec_for(CharT const* spec, Rg&& rg)
@@ -54,12 +56,14 @@ void
 test_format_string()
 {
   // only CharT value types are supported
+  VERIFY( !is_range_formatter_spec_for("s", std::vector<int>()) );
+  VERIFY( !is_format_string_for("{:s}", std::vector<int>()) );
+#ifdef _GLIBCXX_USE_WCHAR_T
   VERIFY( !is_range_formatter_spec_for(L"s", std::vector<char>()) );
   VERIFY( !is_format_string_for(L"{:s}", std::vector<char>()) );
   VERIFY( !is_range_formatter_spec_for(L"s", std::vector<char>()) );
   VERIFY( !is_format_string_for(L"{:s}", std::vector<char>()) );
-  VERIFY( !is_range_formatter_spec_for("s", std::vector<int>()) );
-  VERIFY( !is_format_string_for("{:s}", std::vector<int>()) );
+#endif // _GLIBCXX_USE_WCHAR_T
 
   // invalid format stringss
   VERIFY( !is_range_formatter_spec_for("?", std::vector<char>()) );
@@ -240,7 +244,6 @@ bool strip_prefix(std::string_view& v, size_t n, char c)
   return true;
 }
 
-
 void test_padding()
 {
   std::string res;
@@ -285,6 +288,9 @@ int main()
 {
   test_format_string();
   test_outputs<char>();
-  test_outputs<wchar_t>();
   test_nested();
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+  test_outputs<wchar_t>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
diff --git a/libstdc++-v3/testsuite/std/format/tuple.cc 
b/libstdc++-v3/testsuite/std/format/tuple.cc
index ff0359b9aba..63bafc1364e 100644
--- a/libstdc++-v3/testsuite/std/format/tuple.cc
+++ b/libstdc++-v3/testsuite/std/format/tuple.cc
@@ -26,18 +26,6 @@ is_format_string_for(const char* str, Args&&... args)
   }
 }
 
-template<typename... Args>
-bool
-is_format_string_for(const wchar_t* str, Args&&... args)
-{
-  try {
-    (void) std::vformat(str, std::make_wformat_args(args...));
-    return true;
-  } catch (const std::format_error&) {
-    return false;
-  }
-}
-
 #define WIDEN_(C, S) ::std::__format::_Widen<C>(S, L##S)
 #define WIDEN(S) WIDEN_(_CharT, S)
 
@@ -346,7 +334,10 @@ int main()
 {
   test_format_string();
   test_outputs<char>();
-  test_outputs<wchar_t>();
   test_nested();
   test_padding();
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+  test_outputs<wchar_t>();
+#endif // _GLIBCXX_USE_WCHAR_T
 }
-- 
2.49.0

Reply via email to