From 7470a35bd9ac1cfd41fbf8c1ead1d0cad99225f1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 26 Sep 2010 14:21:38 +0200 Subject: [PATCH] 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. --- ChangeLog | 11 +++++++++ modules/stdlib-tests | 1 + modules/sys_wait-tests | 1 + tests/test-stdlib.c | 33 ++++---------------------- tests/test-sys_wait.c | 30 ++++++------------------ tests/test-sys_wait.h | 53 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 77 insertions(+), 52 deletions(-) create mode 100644 tests/test-sys_wait.h diff --git a/ChangeLog b/ChangeLog index cfcf9a978e..e570eb18c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2010-09-26 Bruno Haible + + 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 * modules/getaddrinfo (Depends-on): Depend on the sockets module. diff --git a/modules/stdlib-tests b/modules/stdlib-tests index 4f9368a3c3..7225c65b8b 100644 --- a/modules/stdlib-tests +++ b/modules/stdlib-tests @@ -1,5 +1,6 @@ Files: tests/test-stdlib.c +tests/test-sys_wait.h Depends-on: verify diff --git a/modules/sys_wait-tests b/modules/sys_wait-tests index 9c877d8852..3795082607 100644 --- a/modules/sys_wait-tests +++ b/modules/sys_wait-tests @@ -1,5 +1,6 @@ Files: tests/test-sys_wait.c +tests/test-sys_wait.h Depends-on: diff --git a/tests/test-stdlib.c b/tests/test-stdlib.c index 5a8f045f55..ec8af178b1 100644 --- a/tests/test-stdlib.c +++ b/tests/test-stdlib.c @@ -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 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; } diff --git a/tests/test-sys_wait.c b/tests/test-sys_wait.c index e9e63b6bbd..6ab3ebfd31 100644 --- a/tests/test-sys_wait.c +++ b/tests/test-sys_wait.c @@ -23,41 +23,25 @@ /* 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 index 0000000000..bb10450867 --- /dev/null +++ b/tests/test-sys_wait.h @@ -0,0 +1,53 @@ +/* Test of macros shared between and . + 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 . */ + +/* Written by Eric Blake , 2010. */ + +static int +test_sys_wait_macros (void) +{ + /* Check subset of 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; +} -- 2.30.2