stdlib tests: Avoid code duplication.
authorBruno Haible <bruno@clisp.org>
Sun, 26 Sep 2010 12:21:38 +0000 (14:21 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 26 Sep 2010 12:21:38 +0000 (14:21 +0200)
* modules/stdlib-tests (Files): Add tests/test-sys_wait.h.
* modules/sys_wait-tests (Files): Likewise.
* tests/test-sys_wait.h: New file, extracted from tests/test-stdlib.c.
* tests/test-stdlib.c: Include test-sys_wait.h.
(main): Invoke test_sys_wait_macros.
* tests/test-sys_wait.c: Include test-sys_wait.h.
(main): Invoke test_sys_wait_macros.

ChangeLog
modules/stdlib-tests
modules/sys_wait-tests
tests/test-stdlib.c
tests/test-sys_wait.c
tests/test-sys_wait.h [new file with mode: 0644]

index cfcf9a9..e570eb1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-09-26  Bruno Haible  <bruno@clisp.org>
+
+       stdlib tests: Avoid code duplication.
+       * modules/stdlib-tests (Files): Add tests/test-sys_wait.h.
+       * modules/sys_wait-tests (Files): Likewise.
+       * tests/test-sys_wait.h: New file, extracted from tests/test-stdlib.c.
+       * tests/test-stdlib.c: Include test-sys_wait.h.
+       (main): Invoke test_sys_wait_macros.
+       * tests/test-sys_wait.c: Include test-sys_wait.h.
+       (main): Invoke test_sys_wait_macros.
+
 2010-09-25  Simon Josefsson  <simon@josefsson.org>
 
        * modules/getaddrinfo (Depends-on): Depend on the sockets module.
index 4f9368a..7225c65 100644 (file)
@@ -1,5 +1,6 @@
 Files:
 tests/test-stdlib.c
+tests/test-sys_wait.h
 
 Depends-on:
 verify
index 9c877d8..3795082 100644 (file)
@@ -1,5 +1,6 @@
 Files:
 tests/test-sys_wait.c
+tests/test-sys_wait.h
 
 Depends-on:
 
index 5a8f045..ec8af17 100644 (file)
@@ -38,38 +38,13 @@ static int exitcode = EXIT_SUCCESS;
    per POSIX 2008.  */
 verify (sizeof NULL == sizeof (void *));
 
+#include "test-sys_wait.h"
+
 int
 main (void)
 {
-  /* Check subset of <sys/wait.h> macros that must be visible here.
-     Note that some of these macros are only portable when operating
-     on an lvalue.  */
-  int i;
-  for (i = 0; i < 0x8000; i = (i ? i << 1 : 1))
-    {
-      /* POSIX requires that for all valid process statuses, that
-         exactly one of these three macros is true.  But not all
-         possible 16-bit values map to valid process status.
-         Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits
-         to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80
-         or 0x8000 to flag that core was also dumped.  Since we don't
-         know which byte is WIFEXITED, we skip the both possible bits
-         that can signal core dump.  */
-      if (i == 0x80)
-        continue;
-      if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1)
-        return 1;
-    }
-  i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i);
+  if (test_sys_wait_macros ())
+    return 1;
 
-  switch (i)
-    {
-#if 0
-  /* Gnulib doesn't guarantee these, yet.  */
-    case WNOHANG:
-    case WUNTRACED:
-#endif
-      break;
-    }
   return exitcode;
 }
index e9e63b6..6ab3ebf 100644 (file)
 /* Check for existence of required types.  */
 static pid_t a;
 
+#include "test-sys_wait.h"
+
 int
 main (void)
 {
-  /* Check for existence of required macros.  Note that we document
-     that these are safe only on lvalues.  */
-  int i;
-  for (i = 0; i < 0x10000; i = (i ? i << 1 : 1))
-    {
-      /* POSIX requires that for all valid process statuses, that
-         exactly one of these three macros is true.  But not all
-         possible 16-bit values map to valid process status.
-         Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits
-         to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80
-         or 0x8000 to flag that core was also dumped.  Since we don't
-         know which byte is WIFEXITED, we skip the both possible bits
-         that can signal core dump.  */
-      if (i == 0x80)
-        continue;
-      if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1)
-        return 1;
-    }
-  i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i);
+  if (test_sys_wait_macros ())
+    return 1;
 
-  switch (i)
+  switch (0)
     {
 #if 0
   /* Gnulib doesn't guarantee these, yet.  */
     case WCONTINUED:
-    case WNOHANG:
-    case WUNTRACED:
     case WEXITED:
     case WNOWAIT:
     case WSTOPPED:
 #endif
       break;
     }
-  return a ? i : 0;
+
+  return a ? 1 : 0;
 }
diff --git a/tests/test-sys_wait.h b/tests/test-sys_wait.h
new file mode 100644 (file)
index 0000000..bb10450
--- /dev/null
@@ -0,0 +1,53 @@
+/* Test of macros shared between <sys/wait.h> and <stdlib.h>.
+   Copyright (C) 2010 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 <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake <ebb9@byu.net>, 2010.  */
+
+static int
+test_sys_wait_macros (void)
+{
+  /* Check subset of <sys/wait.h> macros that must be visible here.
+     Note that some of these macros are only portable when operating
+     on an lvalue.  */
+  int i;
+  for (i = 0; i < 0x8000; i = (i ? i << 1 : 1))
+    {
+      /* POSIX requires that for all valid process statuses, that
+         exactly one of these three macros is true.  But not all
+         possible 16-bit values map to valid process status.
+         Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits
+         to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80
+         or 0x8000 to flag that core was also dumped.  Since we don't
+         know which byte is WIFEXITED, we skip the both possible bits
+         that can signal core dump.  */
+      if (i == 0x80)
+        continue;
+      if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1)
+        return 1;
+    }
+  i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i);
+
+  switch (i)
+    {
+#if 0
+  /* Gnulib doesn't guarantee these, yet.  */
+    case WNOHANG:
+    case WUNTRACED:
+#endif
+      break;
+    }
+  return 0;
+}