[gcc r16-3762] libstdc++: Tests of %W/%V/%U and %G for !ok date values.

Tomasz Kaminski tkaminsk@gcc.gnu.org
Thu Sep 11 09:06:42 GMT 2025


https://gcc.gnu.org/g:61ce720b1435b85d74835f1b1ee8eab105238e9b

commit r16-3762-g61ce720b1435b85d74835f1b1ee8eab105238e9b
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date:   Wed Sep 10 16:53:58 2025 +0200

    libstdc++: Tests of %W/%V/%U and %G for !ok date values.
    
    libstdc++-v3/ChangeLog:
    
            * testsuite/std/time/year_month_day/io.cc: Additional tests.
    
    Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
    Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>

Diff:
---
 .../testsuite/std/time/year_month_day/io.cc        | 48 +++++++++++++---------
 1 file changed, 28 insertions(+), 20 deletions(-)

diff --git a/libstdc++-v3/testsuite/std/time/year_month_day/io.cc b/libstdc++-v3/testsuite/std/time/year_month_day/io.cc
index 632b7a0fc2da..7b09ff4b95af 100644
--- a/libstdc++-v3/testsuite/std/time/year_month_day/io.cc
+++ b/libstdc++-v3/testsuite/std/time/year_month_day/io.cc
@@ -43,38 +43,46 @@ test_format()
   s = std::format("{:%G-W%V-%u}", 2022y/January/3);
   VERIFY( s == "2022-W01-1" );
 
+  std::chrono::month Quindecember(17);
   // %U: Week number for weeks starting on Sunday
   s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/January/1);
   VERIFY( s == "Day 6 (Sat) of Week 00 of 2022" );
   s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/January/2);
   VERIFY( s == "Day 0 (Sun) of Week 01 of 2022" );
+  s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/Quindecember/20);
+  VERIFY( s == "Day 1 (Mon) of Week 73 of 2022" );
   // %W: Week number for weeks starting on Monday
   s = std::format("Day {:%u (%a) of Week %W of %Y}", 2022y/January/2);
   VERIFY( s == "Day 7 (Sun) of Week 00 of 2022" );
   s = std::format("Day {:%u (%a) of Week %W of %Y}", 2022y/January/3);
   VERIFY( s == "Day 1 (Mon) of Week 01 of 2022" );
+  s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/Quindecember/20);
+  VERIFY( s == "Day 1 (Mon) of Week 73 of 2022" );
 
+  // %G: ISO week-calendar year (ISO 8601)
   // %V: ISO week number (ISO 8601).
-  s = std::format("W{:%V}", 1977y/1/1);
-  VERIFY( s == "W53" );
-  s = std::format("W{:%V}", 1977y/1/2);
-  VERIFY( s == "W53" );
-  s = std::format("W{:%V}", 1977y/12/31);
-  VERIFY( s == "W52" );
-  s = std::format("W{:%V}", 1978y/1/1);
-  VERIFY( s == "W52" );
-  s = std::format("W{:%V}", 1978y/1/2);
-  VERIFY( s == "W01" );
-  s = std::format("W{:%V}", 1978y/12/31);
-  VERIFY( s == "W52" );
-  s = std::format("W{:%V}", 1979y/1/1);
-  VERIFY( s == "W01" );
-  s = std::format("W{:%V}", 1979y/12/30);
-  VERIFY( s == "W52" );
-  s = std::format("W{:%V}", 1979y/12/31);
-  VERIFY( s == "W01" );
-  s = std::format("W{:%V}", 1980y/1/1);
-  VERIFY( s == "W01" );
+  s = std::format("{:%G-W%V}", 1977y/1/1);
+  VERIFY( s == "1976-W53" );
+  s = std::format("{:%G-W%V}", 1977y/1/2);
+  VERIFY( s == "1976-W53" );
+  s = std::format("{:%G-W%V}", 1977y/12/31);
+  VERIFY( s == "1977-W52" );
+  s = std::format("{:%G-W%V}", 1978y/1/1);
+  VERIFY( s == "1977-W52" );
+  s = std::format("{:%G-W%V}", 1978y/1/2);
+  VERIFY( s == "1978-W01" );
+  s = std::format("{:%G-W%V}", 1978y/12/31);
+  VERIFY( s == "1978-W52" );
+  s = std::format("{:%G-W%V}", 1979y/1/1);
+  VERIFY( s == "1979-W01" );
+  s = std::format("{:%G-W%V}", 1979y/12/30);
+  VERIFY( s == "1979-W52" );
+  s = std::format("{:%G-W%V}", 1979y/12/31);
+  VERIFY( s == "1980-W01" );
+  s = std::format("{:%G-W%V}", 1980y/1/1);
+  VERIFY( s == "1980-W01" );
+  s = std::format("{:%G-W%V}", 1980y/18/20);
+  VERIFY( s == "1981-W26" );
 
   s = std::format("{:%x}", 2022y/December/19);
   VERIFY( s == "12/19/22" );


More information about the Libstdc++-cvs mailing list