From: Bruno Haible Date: Sun, 26 Sep 2010 12:21:38 +0000 (+0200) Subject: stdlib tests: Avoid code duplication. X-Git-Tag: v0.1~3755 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;h=7470a35bd9ac1cfd41fbf8c1ead1d0cad99225f1;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index cfcf9a978..e570eb18c 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 4f9368a3c..7225c65b8 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 9c877d885..379508260 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 5a8f045f5..ec8af178b 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 e9e63b6bb..6ab3ebfd3 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 000000000..bb1045086 --- /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; +}