I can't think of a straightforward way to prune these two
similar tests to a more meaningful subset: there's no easy
pruning to each Nth iteration instead of every iteration.
Hopefully exiting the loop after a million runs at the
beginning of the tested range of dates, will catch the gist
of the test.  I think I can interpret Jeffs pre-approval at
https://gcc.gnu.org/pipermail/gcc-patches/2024-December/672218.html
to cover this change too, but IMHO this one is less obvious
than that change, so I'll wait until 2024-01-11, before
defaulting to committing it, in case of no comments.

Having said that: ok to commit?

-- >8 --
These two long-running tests happened to fail for me when
run in parallel (nprocs - 1) compared to a serial run, for
target mmix on my laptop.  The runtime is 3m40s for 3.cc
before this change, and 0.9s afterwards.

        * testsuite/std/time/year_month_day/3.cc [ITERATIONS] (test01): Limit
        the number of tested dates to ITERATIONS.  Pass -DITERATIONS=100000
        for simulators.
        * testsuite/std/time/year_month_day/4.cc: Ditto.
---
 libstdc++-v3/testsuite/std/time/year_month_day/3.cc | 8 ++++++++
 libstdc++-v3/testsuite/std/time/year_month_day/4.cc | 8 ++++++++
 2 files changed, 16 insertions(+)

diff --git a/libstdc++-v3/testsuite/std/time/year_month_day/3.cc 
b/libstdc++-v3/testsuite/std/time/year_month_day/3.cc
index 05dc750c0a09..e98927335e53 100644
--- a/libstdc++-v3/testsuite/std/time/year_month_day/3.cc
+++ b/libstdc++-v3/testsuite/std/time/year_month_day/3.cc
@@ -1,4 +1,5 @@
 // { dg-do run { target c++20 } }
+// { dg-additional-options "-DITERATIONS=100000" { target simulator } }
 
 // Copyright (C) 2021-2024 Free Software Foundation, Inc.
 //
@@ -54,7 +55,14 @@ void test01()
 
   auto n   = days{-12687428};
   auto ymd = -32767y/January/1d;
+#ifdef ITERATIONS
+  int iteration = 0;
+#endif
   while (n < days{11248737}) {
+#ifdef ITERATIONS
+    if (iteration++ == ITERATIONS)
+      break;
+#endif
     VERIFY( year_month_day{sys_days{n}} == ymd );
     ++n;
     advance(ymd);
diff --git a/libstdc++-v3/testsuite/std/time/year_month_day/4.cc 
b/libstdc++-v3/testsuite/std/time/year_month_day/4.cc
index 6b6714e3a85e..a8a90f767ad7 100644
--- a/libstdc++-v3/testsuite/std/time/year_month_day/4.cc
+++ b/libstdc++-v3/testsuite/std/time/year_month_day/4.cc
@@ -1,4 +1,5 @@
 // { dg-do run { target c++20 } }
+// { dg-additional-options "-DITERATIONS=100000" { target simulator } }
 
 // Copyright (C) 2021-2024 Free Software Foundation, Inc.
 //
@@ -54,7 +55,14 @@ void test01()
 
   auto n   = days{-12687428};
   auto ymd = -32767y/January/1d;
+#ifdef ITERATIONS
+  int iteration = 0;
+#endif
   while (ymd < 32767y/December/31d) {
+#ifdef ITERATIONS
+    if (iteration++ == ITERATIONS)
+      break;
+#endif
     VERIFY( static_cast<sys_days>(ymd) == sys_days{n} );
     ++n;
     advance(ymd);
-- 
2.39.2

Reply via email to