Mercurial > hg > octave-nkf > gnulib-hg
changeset 13732:b16d13c70a22
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.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 26 Sep 2010 14:21:38 +0200 |
parents | a35c1efcd66d |
children | 734f3ca7d864 |
files | ChangeLog modules/stdlib-tests modules/sys_wait-tests tests/test-stdlib.c tests/test-sys_wait.c tests/test-sys_wait.h |
diffstat | 6 files changed, 77 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- 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.
--- 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
--- 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:
--- a/tests/test-stdlib.c +++ b/tests/test-stdlib.c @@ -38,38 +38,13 @@ 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; }
--- 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; }
new file mode 100644 --- /dev/null +++ b/tests/test-sys_wait.h @@ -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; +}