On native Windows, when an ASSERT fails or abort() gets otherwise called,
the stdout and stderr buffers are not flushed. This hinders debugging of
some tests. In particular the nstrftime, c-nstrftime tests print some
helpful information, but it is not visible in the log.

This patch helps.


2024-05-27  Bruno Haible  <br...@clisp.org>

        nstrftime, c-nstrftime tests: Improve debuggability.
        * tests/test-nstrftime.h (posixtm_test, tzalloc_test, quarter_test,
        errno_test, locales_test): Flush output after every printf invocation.

diff --git a/tests/test-nstrftime.h b/tests/test-nstrftime.h
index 52c70c931f..18828ae91d 100644
--- a/tests/test-nstrftime.h
+++ b/tests/test-nstrftime.h
@@ -76,6 +76,7 @@ posixtm_test (void)
         {
           fail = 1;
           printf ("%s failed with format %s\n", FUNC_NAME, T[i].fmt);
+          fflush (stdout);
         }
 
       if (! STREQ (buf, T[i].exp))
@@ -83,6 +84,7 @@ posixtm_test (void)
           fail = 1;
           printf ("%s: result mismatch: got %s, expected %s\n",
                   T[i].fmt, buf, T[i].exp);
+          fflush (stdout);
         }
     }
 
@@ -188,6 +190,7 @@ tzalloc_test (void)
             {
               fail = 1;
               printf ("%s: tzalloc: %s\n", TZ[i].setting, strerror (errno));
+              fflush (stdout);
               continue;
             }
           tza->tz = tz;
@@ -200,6 +203,7 @@ tzalloc_test (void)
           fail = 1;
           printf ("%s: %ld: localtime_rz: %s\n", setting, lt,
                   strerror (errno));
+          fflush (stdout);
           continue;
         }
 
@@ -208,6 +212,7 @@ tzalloc_test (void)
         {
           fail = 1;
           printf ("%s: %ld: %s failed\n", setting, lt, FUNC_NAME);
+          fflush (stdout);
           continue;
         }
 
@@ -222,6 +227,7 @@ tzalloc_test (void)
             fail = 1;
           printf ("%s: expected \"%s\", got \"%s\"\n",
                   setting, LT[i].exp, buf);
+          fflush (stdout);
         }
     }
 
@@ -248,6 +254,7 @@ quarter_test (void)
       if (r == 0)
         {
           printf ("%s(\"%%q\") failed\n", FUNC_NAME);
+          fflush (stdout);
           fail = 1;
           break;
         }
@@ -256,6 +263,7 @@ quarter_test (void)
       if (strcmp (out, exp) != 0)
         {
           printf ("%s %%q: expected \"%s\", got \"%s\"\n", FUNC_NAME, exp, 
out);
+          fflush (stdout);
           fail = 1;
           break;
         }
@@ -281,6 +289,7 @@ errno_test (void)
     {
       fail = 1;
       printf ("%s failed to set errno = ERANGE\n", FUNC_NAME);
+      fflush (stdout);
     }
 
   errno = 0;
@@ -289,6 +298,7 @@ errno_test (void)
     {
       fail = 1;
       printf ("%s failed to leave errno alone\n", FUNC_NAME);
+      fflush (stdout);
     }
 
 
@@ -301,6 +311,7 @@ errno_test (void)
         {
           fail = 1;
           printf ("%s failed to set errno = EOVERFLOW\n", FUNC_NAME);
+          fflush (stdout);
         }
 
       if (mktime_z (0, &tm) != (time_t) -1)
@@ -308,6 +319,7 @@ errno_test (void)
           fail = 1;
           printf ("%s %%s failed but mktime_z worked for tm_year=%d\n",
                   FUNC_NAME, bigyear);
+          fflush (stdout);
         }
     }
   else
@@ -322,6 +334,7 @@ errno_test (void)
             {
               fail = 1;
               printf ("gmtime failed on %s result\n", FUNC_NAME);
+              fflush (stdout);
             }
           else
             {
@@ -333,6 +346,7 @@ errno_test (void)
                   fail = 1;
                   printf ("%s %%s first returned '%s', then '%s'\n",
                           FUNC_NAME, buf, buf1);
+                  fflush (stdout);
                 }
             }
         }
@@ -361,6 +375,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%+4Y-%m-%d %H:%M:%S.%N", tm, 0, ns);
   ASSERT (n > 0);
   printf ("Format as ISO 8601: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "2017-10-26 06:40:03.123456789"));
 
   /* Exercise various POSIX format directives.  */
@@ -368,6 +383,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%a", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%a directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -382,6 +398,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%A", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%A directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -396,6 +413,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%b", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%b directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -410,6 +428,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%B", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%B directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -423,6 +442,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%c", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%c directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -441,41 +461,49 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%C", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%C directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "20"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%d", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%d directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "26"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%D", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%D directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "10/26/17"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%e", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%e directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "26"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%F", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%F directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "2017-10-26"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%g", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%g directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "17"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%G", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%G directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "2017"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%h", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%h directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -490,31 +518,37 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%H", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%H directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "06"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%I", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%I directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "06"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%j", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%j directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "299"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%m", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%m directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "10"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%M", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%M directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "40"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%n", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%n directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "\n"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%p", tm, 0, ns);
@@ -523,6 +557,7 @@ locales_test (language_t language)
     case english:
       ASSERT (n > 0);
       printf ("%%p directive: %s\n", buf);
+      fflush (stdout);
       ASSERT (STREQ (buf, "AM"));
       break;
     case french:
@@ -533,6 +568,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%r", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%r directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -548,51 +584,61 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%R", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%R directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "06:40"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%S", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%S directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "03"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%t", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%t directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "\t"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%T", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%T directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "06:40:03"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%u", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%u directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "4"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%U", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%U directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "43"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%V", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%V directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "43"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%w", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%w directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "4"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%W", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%W directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "43"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%x", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%x directive: %s\n", buf);
+  fflush (stdout);
   switch (language)
     {
     case english:
@@ -607,32 +653,38 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%X", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%X directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "06:40:03"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%y", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%y directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "17"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%Y", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%Y directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "2017"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%z", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%z directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "+0000"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%Z", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%Z directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "GMT") /* glibc, NetBSD, OpenBSD, AIX, Solaris, Cygwin, 
Android */
           || STREQ (buf, "UTC") /* musl, macOS, FreeBSD */);
 
   n = FUNC_CHECKED (buf, sizeof buf, "%%", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%%% directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "%"));
 
   /* Exercise various GNU extensions from glibc.  */
@@ -640,11 +692,13 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%k", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%k directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, " 6"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%l", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%l directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, " 6"));
 
   n = FUNC_CHECKED (buf, sizeof buf, "%P", tm, 0, ns);
@@ -653,6 +707,7 @@ locales_test (language_t language)
     case english:
       ASSERT (n > 0);
       printf ("%%P directive: %s\n", buf);
+      fflush (stdout);
       ASSERT (STREQ (buf, "am"));
       break;
     case french:
@@ -663,6 +718,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%s", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%s directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "1509000003"));
 
   /* Exercise various GNU extensions from gnulib.  */
@@ -670,6 +726,7 @@ locales_test (language_t language)
   n = FUNC_CHECKED (buf, sizeof buf, "%N", tm, 0, ns);
   ASSERT (n > 0);
   printf ("%%N directive: %s\n", buf);
+  fflush (stdout);
   ASSERT (STREQ (buf, "123456789"));
 
   return fail;




Reply via email to