Rewrite this test to work with ctest and re-enable it on the appropriate platforms (including Cygwin, which has fork())

This commit is contained in:
Erik M. Bray 2018-02-06 11:07:56 +01:00
parent 95f2cea45b
commit ce2028b425
3 changed files with 19 additions and 12 deletions

View File

@ -304,6 +304,7 @@ endif
ifeq ($(OSNAME), CYGWIN_NT) ifeq ($(OSNAME), CYGWIN_NT)
NEED_PIC = 0 NEED_PIC = 0
NO_EXPRECISION = 1 NO_EXPRECISION = 1
OS_CYGWIN_NT = 1
endif endif
ifneq ($(OSNAME), WINNT) ifneq ($(OSNAME), WINNT)

View File

@ -12,7 +12,15 @@ OBJS=utest_main.o test_amax.o
#test_rot.o test_swap.o test_axpy.o test_dotu.o test_rotmg.o test_dsdot.o test_fork.o #test_rot.o test_swap.o test_axpy.o test_dotu.o test_rotmg.o test_dsdot.o test_fork.o
ifneq ($(NO_LAPACK), 1) ifneq ($(NO_LAPACK), 1)
OBJS += test_potrs.o #OBJS += test_potrs.o
endif
ifndef OS_WINDOWS
OBJS += test_fork.o
else
ifdef OS_CYGWIN_NT
OBJS += test_fork.o
endif
endif endif
all : run_test all : run_test

View File

@ -31,8 +31,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**********************************************************************************/ **********************************************************************************/
#ifndef OS_WINDOWS #include "openblas_utest.h"
#include "common_utest.h"
#include <sys/wait.h> #include <sys/wait.h>
#include <cblas.h> #include <cblas.h>
@ -54,11 +53,11 @@ void check_dgemm(double *a, double *b, double *result, double *expected, int n)
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, n, n, n, cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, n, n, n,
1.0, a, n, b, n, 0.0, result, n); 1.0, a, n, b, n, 0.0, result, n);
for(i = 0; i < n * n; ++i) { for(i = 0; i < n * n; ++i) {
CU_ASSERT_DOUBLE_EQUAL(expected[i], result[i], CHECK_EPS); ASSERT_DBL_NEAR_TOL(expected[i], result[i], DOUBLE_EPS);
} }
} }
void test_fork_safety(void) CTEST(fork, safety)
{ {
int n = 1000; int n = 1000;
int i; int i;
@ -89,7 +88,7 @@ void test_fork_safety(void)
fork_pid = fork(); fork_pid = fork();
if (fork_pid == -1) { if (fork_pid == -1) {
CU_FAIL("Failed to fork process."); CTEST_ERR("Failed to fork process.");
} else if (fork_pid == 0) { } else if (fork_pid == 0) {
// Compute a DGEMM product in the child process to check that the // Compute a DGEMM product in the child process to check that the
// thread pool as been properly been reinitialized after the fork. // thread pool as been properly been reinitialized after the fork.
@ -99,7 +98,7 @@ void test_fork_safety(void)
// recursively // recursively
fork_pid_nested = fork(); fork_pid_nested = fork();
if (fork_pid_nested == -1) { if (fork_pid_nested == -1) {
CU_FAIL("Failed to fork process."); CTEST_ERR("Failed to fork process.");
exit(1); exit(1);
} else if (fork_pid_nested == 0) { } else if (fork_pid_nested == 0) {
check_dgemm(a, b, d, c, n); check_dgemm(a, b, d, c, n);
@ -108,8 +107,8 @@ void test_fork_safety(void)
check_dgemm(a, b, d, c, n); check_dgemm(a, b, d, c, n);
int child_status = 0; int child_status = 0;
pid_t wait_pid = wait(&child_status); pid_t wait_pid = wait(&child_status);
CU_ASSERT(wait_pid == fork_pid_nested); ASSERT_EQUAL(wait_pid, fork_pid_nested);
CU_ASSERT(WEXITSTATUS (child_status) == 0); ASSERT_EQUAL(0, WEXITSTATUS (child_status));
exit(0); exit(0);
} }
} else { } else {
@ -117,8 +116,7 @@ void test_fork_safety(void)
// Wait for the child to finish and check the exit code. // Wait for the child to finish and check the exit code.
int child_status = 0; int child_status = 0;
pid_t wait_pid = wait(&child_status); pid_t wait_pid = wait(&child_status);
CU_ASSERT(wait_pid == fork_pid); ASSERT_EQUAL(wait_pid, fork_pid);
CU_ASSERT(WEXITSTATUS (child_status) == 0); ASSERT_EQUAL(0, WEXITSTATUS (child_status));
} }
} }
#endif