]> Savannah Git Hosting - gnulib.git/commitdiff
New convention for multithread-safety tests.
authorBruno Haible <bruno@clisp.org>
Sat, 21 Dec 2019 06:41:08 +0000 (07:41 +0100)
committerBruno Haible <bruno@clisp.org>
Sat, 21 Dec 2019 06:41:08 +0000 (07:41 +0100)
* tests/test-setlocale_null-mt-one.c: Renamed from
tests/test-setlocale_null-one.c.
* tests/test-setlocale_null-mt-all.c: Renamed from
tests/test-setlocale_null-all.c.
* modules/setlocale-null-tests (Files, Makefile.am): Update.

ChangeLog
modules/setlocale-null-tests
tests/test-setlocale_null-all.c [deleted file]
tests/test-setlocale_null-mt-all.c [new file with mode: 0644]
tests/test-setlocale_null-mt-one.c [new file with mode: 0644]
tests/test-setlocale_null-one.c [deleted file]

index b38bbe23ab1783aa6e1c6e5b97dbe3e0c5130251..7dc34641ca472790cebf33e715e4badfe3c8f705 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2019-12-21  Bruno Haible  <bruno@clisp.org>
+
+       New convention for multithread-safety tests.
+       * tests/test-setlocale_null-mt-one.c: Renamed from
+       tests/test-setlocale_null-one.c.
+       * tests/test-setlocale_null-mt-all.c: Renamed from
+       tests/test-setlocale_null-all.c.
+       * modules/setlocale-null-tests (Files, Makefile.am): Update.
+
 2019-12-21  Bruno Haible  <bruno@clisp.org>
 
        quotearg tests: Fix conflict with hard-locale tests.
index 2114848ac469100a91125b175367f2cf8fd47777..f794711e394058232bd393381fd15896140c58dd 100644 (file)
@@ -1,7 +1,7 @@
 Files:
 tests/test-setlocale_null.c
-tests/test-setlocale_null-one.c
-tests/test-setlocale_null-all.c
+tests/test-setlocale_null-mt-one.c
+tests/test-setlocale_null-mt-all.c
 
 Depends-on:
 thread
@@ -12,12 +12,12 @@ configure.ac:
 Makefile.am:
 TESTS += \
   test-setlocale_null \
-  test-setlocale_null-one \
-  test-setlocale_null-all
+  test-setlocale_null-mt-one \
+  test-setlocale_null-mt-all
 check_PROGRAMS += \
   test-setlocale_null \
-  test-setlocale_null-one \
-  test-setlocale_null-all
+  test-setlocale_null-mt-one \
+  test-setlocale_null-mt-all
 test_setlocale_null_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@
-test_setlocale_null_one_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP)
-test_setlocale_null_all_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP)
+test_setlocale_null_mt_one_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP)
+test_setlocale_null_mt_all_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP)
diff --git a/tests/test-setlocale_null-all.c b/tests/test-setlocale_null-all.c
deleted file mode 100644 (file)
index abf2df4..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Multithread-safety test for setlocale_null_r (LC_ALL, ...).
-   Copyright (C) 2019 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <locale.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "glthread/thread.h"
-
-/* We want to use the system's setlocale() function here, not the gnulib
-   override.  */
-#undef setlocale
-
-
-/* Some common locale names.  */
-
-#if defined _WIN32 && !defined __CYGWIN__
-# define ENGLISH "English_United States"
-# define GERMAN  "German_Germany"
-# define FRENCH  "French_France"
-# define ENCODING ".1252"
-#else
-# define ENGLISH "en_US"
-# define GERMAN  "de_DE"
-# define FRENCH  "fr_FR"
-# if defined __sgi
-#  define ENCODING ".ISO8859-15"
-# elif defined __hpux
-#  define ENCODING ".utf8"
-# else
-#  define ENCODING ".UTF-8"
-# endif
-#endif
-
-static const char LOCALE1[] = ENGLISH ENCODING;
-static const char LOCALE2[] = GERMAN ENCODING;
-static const char LOCALE3[] = FRENCH ENCODING;
-
-static char *expected;
-
-static void *
-thread1_func (void *arg)
-{
-  for (;;)
-    {
-      char buf[SETLOCALE_NULL_ALL_MAX];
-
-      if (setlocale_null_r (LC_ALL, buf, sizeof (buf)))
-        abort ();
-      if (strcmp (expected, buf) != 0)
-        {
-          fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr);
-          abort ();
-        }
-    }
-
-  /*NOTREACHED*/
-  return NULL;
-}
-
-static void *
-thread2_func (void *arg)
-{
-  for (;;)
-    {
-      char buf[SETLOCALE_NULL_ALL_MAX];
-
-      setlocale_null_r (LC_NUMERIC, buf, sizeof (buf));
-      setlocale_null_r (LC_ALL, buf, sizeof (buf));
-    }
-
-  /*NOTREACHED*/
-  return NULL;
-}
-
-int
-main (int argc, char *argv[])
-{
-  if (setlocale (LC_ALL, LOCALE1) == NULL)
-    {
-      fprintf (stderr, "Skipping test: LOCALE1 not recognized\n");
-      return 77;
-    }
-  if (setlocale (LC_NUMERIC, LOCALE2) == NULL)
-    {
-      fprintf (stderr, "Skipping test: LOCALE2 not recognized\n");
-      return 77;
-    }
-  if (setlocale (LC_TIME, LOCALE3) == NULL)
-    {
-      fprintf (stderr, "Skipping test: LOCALE3 not recognized\n");
-      return 77;
-    }
-
-  expected = strdup (setlocale (LC_ALL, NULL));
-
-  /* Create the two threads.  */
-  gl_thread_create (thread1_func, NULL);
-  gl_thread_create (thread2_func, NULL);
-
-  /* Let them run for 5 seconds.  */
-  {
-    struct timespec duration;
-    duration.tv_sec = 5;
-    duration.tv_nsec = 0;
-
-    nanosleep (&duration, NULL);
-  }
-
-  return 0;
-}
-
-/* Without locking, the results of this test would be:
-glibc                OK
-musl libc            crash < 10 sec
-macOS                crash < 1 sec
-FreeBSD              crash < 1 sec
-NetBSD               crash < 2 sec
-OpenBSD              crash < 1 sec
-AIX                  crash < 2 sec
-HP-UX                OK
-IRIX                 OK
-Solaris 10           OK
-Solaris 11.0         OK
-Solaris 11.4         OK
-Solaris OpenIndiana  OK
-Haiku                crash < 1 sec
-Cygwin               crash < 1 sec
-mingw                OK
-MSVC                 OK (assuming compiler option /MD !)
-*/
diff --git a/tests/test-setlocale_null-mt-all.c b/tests/test-setlocale_null-mt-all.c
new file mode 100644 (file)
index 0000000..abf2df4
--- /dev/null
@@ -0,0 +1,152 @@
+/* Multithread-safety test for setlocale_null_r (LC_ALL, ...).
+   Copyright (C) 2019 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <locale.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "glthread/thread.h"
+
+/* We want to use the system's setlocale() function here, not the gnulib
+   override.  */
+#undef setlocale
+
+
+/* Some common locale names.  */
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define ENGLISH "English_United States"
+# define GERMAN  "German_Germany"
+# define FRENCH  "French_France"
+# define ENCODING ".1252"
+#else
+# define ENGLISH "en_US"
+# define GERMAN  "de_DE"
+# define FRENCH  "fr_FR"
+# if defined __sgi
+#  define ENCODING ".ISO8859-15"
+# elif defined __hpux
+#  define ENCODING ".utf8"
+# else
+#  define ENCODING ".UTF-8"
+# endif
+#endif
+
+static const char LOCALE1[] = ENGLISH ENCODING;
+static const char LOCALE2[] = GERMAN ENCODING;
+static const char LOCALE3[] = FRENCH ENCODING;
+
+static char *expected;
+
+static void *
+thread1_func (void *arg)
+{
+  for (;;)
+    {
+      char buf[SETLOCALE_NULL_ALL_MAX];
+
+      if (setlocale_null_r (LC_ALL, buf, sizeof (buf)))
+        abort ();
+      if (strcmp (expected, buf) != 0)
+        {
+          fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr);
+          abort ();
+        }
+    }
+
+  /*NOTREACHED*/
+  return NULL;
+}
+
+static void *
+thread2_func (void *arg)
+{
+  for (;;)
+    {
+      char buf[SETLOCALE_NULL_ALL_MAX];
+
+      setlocale_null_r (LC_NUMERIC, buf, sizeof (buf));
+      setlocale_null_r (LC_ALL, buf, sizeof (buf));
+    }
+
+  /*NOTREACHED*/
+  return NULL;
+}
+
+int
+main (int argc, char *argv[])
+{
+  if (setlocale (LC_ALL, LOCALE1) == NULL)
+    {
+      fprintf (stderr, "Skipping test: LOCALE1 not recognized\n");
+      return 77;
+    }
+  if (setlocale (LC_NUMERIC, LOCALE2) == NULL)
+    {
+      fprintf (stderr, "Skipping test: LOCALE2 not recognized\n");
+      return 77;
+    }
+  if (setlocale (LC_TIME, LOCALE3) == NULL)
+    {
+      fprintf (stderr, "Skipping test: LOCALE3 not recognized\n");
+      return 77;
+    }
+
+  expected = strdup (setlocale (LC_ALL, NULL));
+
+  /* Create the two threads.  */
+  gl_thread_create (thread1_func, NULL);
+  gl_thread_create (thread2_func, NULL);
+
+  /* Let them run for 5 seconds.  */
+  {
+    struct timespec duration;
+    duration.tv_sec = 5;
+    duration.tv_nsec = 0;
+
+    nanosleep (&duration, NULL);
+  }
+
+  return 0;
+}
+
+/* Without locking, the results of this test would be:
+glibc                OK
+musl libc            crash < 10 sec
+macOS                crash < 1 sec
+FreeBSD              crash < 1 sec
+NetBSD               crash < 2 sec
+OpenBSD              crash < 1 sec
+AIX                  crash < 2 sec
+HP-UX                OK
+IRIX                 OK
+Solaris 10           OK
+Solaris 11.0         OK
+Solaris 11.4         OK
+Solaris OpenIndiana  OK
+Haiku                crash < 1 sec
+Cygwin               crash < 1 sec
+mingw                OK
+MSVC                 OK (assuming compiler option /MD !)
+*/
diff --git a/tests/test-setlocale_null-mt-one.c b/tests/test-setlocale_null-mt-one.c
new file mode 100644 (file)
index 0000000..a83e485
--- /dev/null
@@ -0,0 +1,152 @@
+/* Multithread-safety test for setlocale_null_r (LC_xxx, ...).
+   Copyright (C) 2019 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <locale.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "glthread/thread.h"
+
+/* We want to use the system's setlocale() function here, not the gnulib
+   override.  */
+#undef setlocale
+
+
+/* Some common locale names.  */
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define ENGLISH "English_United States"
+# define GERMAN  "German_Germany"
+# define FRENCH  "French_France"
+# define ENCODING ".1252"
+#else
+# define ENGLISH "en_US"
+# define GERMAN  "de_DE"
+# define FRENCH  "fr_FR"
+# if defined __sgi
+#  define ENCODING ".ISO8859-15"
+# elif defined __hpux
+#  define ENCODING ".utf8"
+# else
+#  define ENCODING ".UTF-8"
+# endif
+#endif
+
+static const char LOCALE1[] = ENGLISH ENCODING;
+static const char LOCALE2[] = GERMAN ENCODING;
+static const char LOCALE3[] = FRENCH ENCODING;
+
+static char *expected;
+
+static void *
+thread1_func (void *arg)
+{
+  for (;;)
+    {
+      char buf[SETLOCALE_NULL_MAX];
+
+      if (setlocale_null_r (LC_NUMERIC, buf, sizeof (buf)))
+        abort ();
+      if (strcmp (expected, buf) != 0)
+        {
+          fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr);
+          abort ();
+        }
+    }
+
+  /*NOTREACHED*/
+  return NULL;
+}
+
+static void *
+thread2_func (void *arg)
+{
+  for (;;)
+    {
+      char buf[SETLOCALE_NULL_MAX];
+
+      setlocale_null_r (LC_NUMERIC, buf, sizeof (buf));
+      setlocale_null_r (LC_TIME, buf, sizeof (buf));
+    }
+
+  /*NOTREACHED*/
+  return NULL;
+}
+
+int
+main (int argc, char *argv[])
+{
+  if (setlocale (LC_ALL, LOCALE1) == NULL)
+    {
+      fprintf (stderr, "Skipping test: LOCALE1 not recognized\n");
+      return 77;
+    }
+  if (setlocale (LC_NUMERIC, LOCALE2) == NULL)
+    {
+      fprintf (stderr, "Skipping test: LOCALE2 not recognized\n");
+      return 77;
+    }
+  if (setlocale (LC_TIME, LOCALE3) == NULL)
+    {
+      fprintf (stderr, "Skipping test: LOCALE3 not recognized\n");
+      return 77;
+    }
+
+  expected = strdup (setlocale (LC_NUMERIC, NULL));
+
+  /* Create the two threads.  */
+  gl_thread_create (thread1_func, NULL);
+  gl_thread_create (thread2_func, NULL);
+
+  /* Let them run for 2 seconds.  */
+  {
+    struct timespec duration;
+    duration.tv_sec = 2;
+    duration.tv_nsec = 0;
+
+    nanosleep (&duration, NULL);
+  }
+
+  return 0;
+}
+
+/* Without locking, the results of this test would be:
+glibc                OK
+musl libc            OK
+macOS                OK
+FreeBSD              OK
+NetBSD               OK
+OpenBSD              crash < 1 sec
+AIX                  crash < 2 sec
+HP-UX                OK
+IRIX                 OK
+Solaris 10           OK
+Solaris 11.0         OK
+Solaris 11.4         OK
+Solaris OpenIndiana  OK
+Haiku                OK
+Cygwin               OK
+mingw                OK
+MSVC                 OK (assuming compiler option /MD !)
+*/
diff --git a/tests/test-setlocale_null-one.c b/tests/test-setlocale_null-one.c
deleted file mode 100644 (file)
index a83e485..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Multithread-safety test for setlocale_null_r (LC_xxx, ...).
-   Copyright (C) 2019 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <locale.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "glthread/thread.h"
-
-/* We want to use the system's setlocale() function here, not the gnulib
-   override.  */
-#undef setlocale
-
-
-/* Some common locale names.  */
-
-#if defined _WIN32 && !defined __CYGWIN__
-# define ENGLISH "English_United States"
-# define GERMAN  "German_Germany"
-# define FRENCH  "French_France"
-# define ENCODING ".1252"
-#else
-# define ENGLISH "en_US"
-# define GERMAN  "de_DE"
-# define FRENCH  "fr_FR"
-# if defined __sgi
-#  define ENCODING ".ISO8859-15"
-# elif defined __hpux
-#  define ENCODING ".utf8"
-# else
-#  define ENCODING ".UTF-8"
-# endif
-#endif
-
-static const char LOCALE1[] = ENGLISH ENCODING;
-static const char LOCALE2[] = GERMAN ENCODING;
-static const char LOCALE3[] = FRENCH ENCODING;
-
-static char *expected;
-
-static void *
-thread1_func (void *arg)
-{
-  for (;;)
-    {
-      char buf[SETLOCALE_NULL_MAX];
-
-      if (setlocale_null_r (LC_NUMERIC, buf, sizeof (buf)))
-        abort ();
-      if (strcmp (expected, buf) != 0)
-        {
-          fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr);
-          abort ();
-        }
-    }
-
-  /*NOTREACHED*/
-  return NULL;
-}
-
-static void *
-thread2_func (void *arg)
-{
-  for (;;)
-    {
-      char buf[SETLOCALE_NULL_MAX];
-
-      setlocale_null_r (LC_NUMERIC, buf, sizeof (buf));
-      setlocale_null_r (LC_TIME, buf, sizeof (buf));
-    }
-
-  /*NOTREACHED*/
-  return NULL;
-}
-
-int
-main (int argc, char *argv[])
-{
-  if (setlocale (LC_ALL, LOCALE1) == NULL)
-    {
-      fprintf (stderr, "Skipping test: LOCALE1 not recognized\n");
-      return 77;
-    }
-  if (setlocale (LC_NUMERIC, LOCALE2) == NULL)
-    {
-      fprintf (stderr, "Skipping test: LOCALE2 not recognized\n");
-      return 77;
-    }
-  if (setlocale (LC_TIME, LOCALE3) == NULL)
-    {
-      fprintf (stderr, "Skipping test: LOCALE3 not recognized\n");
-      return 77;
-    }
-
-  expected = strdup (setlocale (LC_NUMERIC, NULL));
-
-  /* Create the two threads.  */
-  gl_thread_create (thread1_func, NULL);
-  gl_thread_create (thread2_func, NULL);
-
-  /* Let them run for 2 seconds.  */
-  {
-    struct timespec duration;
-    duration.tv_sec = 2;
-    duration.tv_nsec = 0;
-
-    nanosleep (&duration, NULL);
-  }
-
-  return 0;
-}
-
-/* Without locking, the results of this test would be:
-glibc                OK
-musl libc            OK
-macOS                OK
-FreeBSD              OK
-NetBSD               OK
-OpenBSD              crash < 1 sec
-AIX                  crash < 2 sec
-HP-UX                OK
-IRIX                 OK
-Solaris 10           OK
-Solaris 11.0         OK
-Solaris 11.4         OK
-Solaris OpenIndiana  OK
-Haiku                OK
-Cygwin               OK
-mingw                OK
-MSVC                 OK (assuming compiler option /MD !)
-*/