From 771465fed0cf50ee2dd790723245fc091699c324 Mon Sep 17 00:00:00 2001 From: rpj Date: Mon, 17 May 2004 01:38:02 +0000 Subject: re-indentation, bug fixes, hooks for pre-emptive async cancelation --- tests/ChangeLog | 40 +++++++++++++++++++++---------- tests/GNUmakefile | 46 ++++++++++++++++++++++------------- tests/Makefile | 34 ++++++++++++++++++++------ tests/cancel3.c | 71 ++++++++++++++++++++++++------------------------------- tests/cancel4.c | 12 ---------- tests/cancel5.c | 62 ++++++++++++++++++++---------------------------- tests/cancel6a.c | 12 ---------- tests/cancel6d.c | 12 ---------- 8 files changed, 141 insertions(+), 148 deletions(-) (limited to 'tests') diff --git a/tests/ChangeLog b/tests/ChangeLog index 667747f..e62c257 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,21 +1,35 @@ +2004-05-16 Ross Johnson + + * cancel9.c: New test. + * cancel3.c: Remove inappropriate conditional compilation; + GNU C version of test suite no longer quietly skips this test. + * cancel5.c: Likewise. + * GNUmakefile: Can now build individual test app using default + C version of library using 'make clean testname.c'. + * Makefile: Likewise for VC using 'nmake clean test testname.c'. + +2003-10-14 Ross Johnson + + * Wmakefile: New makefile for Watcom testing. + 2003-09-18 Ross Johnson - * benchtest.h: Move old mutex code into benchlib.c. - * benchlib.c: New statically linked module to ensure that - bench apps don't inline the code and therefore have an unfair - advantage over the pthreads lib routines. Made little or no - difference. - * benchtest1.c: Minor change to avoid compiler warnings. - * benchtest5.c: Likewise. - * benchtest2.c: Fix misinformation in output report. - * README.BENCH: Add comments on results. + * benchtest.h: Move old mutex code into benchlib.c. + * benchlib.c: New statically linked module to ensure that + bench apps don't inline the code and therefore have an unfair + advantage over the pthreads lib routines. Made little or no + difference. + * benchtest1.c: Minor change to avoid compiler warnings. + * benchtest5.c: Likewise. + * benchtest2.c: Fix misinformation in output report. + * README.BENCH: Add comments on results. 2003-09-14 Ross Johnson - * priority1.c: Reworked to comply with modified priority - management and provide additional output. - * priority2.c: Likewise. - * inherit1.c: Likewise. + * priority1.c: Reworked to comply with modified priority + management and provide additional output. + * priority2.c: Likewise. + * inherit1.c: Likewise. 2003-09-03 Ross Johnson diff --git a/tests/GNUmakefile b/tests/GNUmakefile index 7ed1c85..a7c8079 100644 --- a/tests/GNUmakefile +++ b/tests/GNUmakefile @@ -35,9 +35,11 @@ CP = cp -f MV = mv -f RM = rm -f +CAT = cat #CP = copy #MV = rename #RM = erase +#CAT = type MKDIR = mkdir TOUCH = echo Passed > ECHO = @echo @@ -47,18 +49,22 @@ MAKE = make # Mingw32 # XXCFLAGS = -XXLIBS = +XXLIBS = -lws2_32 CFLAGS = -O3 -UNDEBUG -Wall $(XXCFLAGS) #CFLAGS = -g -O0 -UNDEBUG -Wall $(XXCFLAGS) BUILD_DIR = .. INCLUDES = -I. -GCX = DUMMY +# Default lib version +GCX = GC +# Files we need to run the tests +# - paths are relative to pthreads build dir. HDR = pthread.h semaphore.h sched.h LIB = libpthread$(GCX).a DLL = pthread$(GCX).dll +QAPC = ../QueueUserAPCEx/User/quserex.dll -COPYFILES = $(HDR) $(LIB) $(DLL) +COPYFILES = $(HDR) $(LIB) $(DLL) $(QAPC) # If a test case returns a non-zero exit code to the shell, make will # stop. @@ -85,7 +91,8 @@ TESTS = sizes loadfree \ priority1 priority2 inherit1 \ spin1 spin2 spin3 spin4 \ barrier1 barrier2 barrier3 barrier4 barrier5 \ - exception1 exception2 exception3 + exception1 exception2 exception3 \ + cancel9 BENCHTESTS = \ benchtest1 benchtest2 benchtest3 benchtest4 benchtest5 @@ -240,30 +247,37 @@ spin4.pass: spin3.pass tsd1.pass: join1.pass valid1.pass: join1.pass valid2.pass: valid1.pass +cancel9.pass: cancel8.pass -#%.pass: %.exe $(HDR) -%.pass: %.exe $(LIB) $(DLL) $(HDR) +sizes.pass: sizes.exe + @ $(ECHO) Running $* + $< > SIZES.$(GCX) + @ $(CAT) SIZES.$(GCX) + @ $(ECHO) Passed + @ $(TOUCH) $@ + +%.pass: %.exe @ $(ECHO) Running $* $* @ $(ECHO) Passed @ $(TOUCH) $@ -%.bench: $(LIB) $(DLL) $(HDR) $(XXLIBS) %.exe +%.bench: $(XXLIBS) %.exe @ $(ECHO) Running $* $* @ $(ECHO) Done @ $(TOUCH) $@ -%.exe: %.c +%.exe: %.c $(LIB) $(DLL) $(HDR) $(QAPC) @ $(ECHO) Compiling $@ - @ $(ECHO) $(CC) $(CFLAGS) -o $@ $^ $(INCLUDES) -L. -lpthread$(GCX) -lsupc++ $(XXLIBS) - @ $(CC) $(CFLAGS) -o $@ $^ $(INCLUDES) -L. -lpthread$(GCX) -lsupc++ $(XXLIBS) + @ $(ECHO) $(CC) $(CFLAGS) -o $@ $< $(INCLUDES) -L. -lpthread$(GCX) -lsupc++ $(XXLIBS) + @ $(CC) $(CFLAGS) -o $@ $< $(INCLUDES) -L. -lpthread$(GCX) -lsupc++ $(XXLIBS) -%.pre: %.c - @ $(CC) -E $(CFLAGS) -o $@ $^ $(INCLUDES) +%.pre: %.c $(HDR) + @ $(CC) -E $(CFLAGS) -o $@ $< $(INCLUDES) -%.s: %.c - @ $(CC) -S $(CFLAGS) -o $@ $^ $(INCLUDES) +%.s: %.c $(HDR) + @ $(CC) -S $(CFLAGS) -o $@ $< $(INCLUDES) $(COPYFILES): @ $(ECHO) Copying $@ @@ -274,8 +288,8 @@ pthread.dll: benchlib.o: benchlib.c @ $(ECHO) Compiling $@ - @ $(ECHO) $(CC) -c $(CFLAGS) $^ $(INCLUDES) - @ $(CC) -c $(CFLAGS) $^ $(INCLUDES) + @ $(ECHO) $(CC) -c $(CFLAGS) $< $(INCLUDES) + @ $(CC) -c $(CFLAGS) $< $(INCLUDES) clean: - $(RM) *.dll diff --git a/tests/Makefile b/tests/Makefile index 210b8a1..17cb0c8 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -34,15 +34,18 @@ CP = copy RM = erase +CAT = type MKDIR = mkdir TOUCH = echo Passed > ECHO = @echo +QAPC = ..\QueueUserAPCEx\User\quserex.dll + CPHDR = pthread.h semaphore.h sched.h OPTIM = /O2 /Ob0 -XXLIBS = +XXLIBS = ws2_32.lib # C++ Exceptions VCEFLAGS = /GX /TP /DPtW32NoCatchWarn /D__CLEANUP_CXX @@ -59,12 +62,16 @@ VCDLL = pthreadVC.dll # C++ Exceptions in application - using VC version of pthreads dll VCXFLAGS = /GX /TP /D__CLEANUP_C +# Defaults +CPLIB = pthreadVC.lib +CPDLL = pthreadVC.dll + CFLAGS= $(OPTIM) /W3 /WX /MD /nologo /Yd /Zi -D_WIN32_WINNT=0x400 LFLAGS= /INCREMENTAL:NO INCLUDES=-I. BUILD_DIR=.. -COPYFILES = $(CPHDR) $(CPLIB) $(CPDLL) +COPYFILES = $(CPHDR) $(CPLIB) $(CPDLL) $(QAPC) TEST = EHFLAGS = @@ -100,7 +107,8 @@ PASSES= sizes.pass loadfree.pass \ priority1.pass priority2.pass inherit1.pass \ spin1.pass spin2.pass spin3.pass spin4.pass \ barrier1.pass barrier2.pass barrier3.pass barrier4.pass barrier5.pass \ - exception1.pass exception2.pass exception3.pass + exception1.pass exception2.pass exception3.pass \ + cancel9 BENCHRESULTS = \ benchtest1.bench benchtest2.bench benchtest3.bench benchtest4.bench benchtest5.bench @@ -123,12 +131,23 @@ all: @ nmake clean VSE @ nmake clean VC-bench -tests: $(CPLIB) $(CPDLL) $(CPHDR) $(PASSES) +# This allows an individual test application to be made using the default lib. +# e.g. nmake clean test cancel3.exe +test: $(CPLIB) $(CPDLL) $(CPHDR) $(QAPC) + +tests: $(CPLIB) $(CPDLL) $(CPHDR) $(QAPC) $(PASSES) @ $(ECHO) ALL TESTS PASSED! Congratulations! benchtests: $(CPLIB) $(CPDLL) $(CPHDR) $(XXLIBS) $(BENCHRESULTS) @ $(ECHO) ALL BENCH TESTS DONE. +sizes.pass: sizes.exe + @ $(ECHO) ... Running $(TEST) test: $*.exe + @ .\$*.exe > SIZES.$(TEST) + @ $(CAT) SIZES.$(TEST) + @ $(ECHO) ...... Passed + @ $(TOUCH) $*.pass + $(PASSES): $*.exe @ $(ECHO) ... Running $(TEST) test: $*.exe @ .\$*.exe @@ -180,9 +199,9 @@ $(COPYFILES): @ $(ECHO) Copying $@ @ $(CP) $(BUILD_DIR)\$@ . -pthread.dll: - @ $(CP) $(CPDLL) $*.dll - @ $(CP) $(CPLIB) $*.lib +pthread.dll: $(CPDLL) + @ $(CP) $(CPDLL) pthread.dll + @ $(CP) $(CPLIB) pthread.lib clean: - $(RM) *.dll @@ -312,3 +331,4 @@ spin4.pass: spin3.pass tsd1.pass: join1.pass valid1.pass: join1.pass valid2.pass: valid1.pass +cancel9.pass: cancel8.pass diff --git a/tests/cancel3.c b/tests/cancel3.c index ed1df0f..c3657d6 100644 --- a/tests/cancel3.c +++ b/tests/cancel3.c @@ -33,13 +33,13 @@ * * -------------------------------------------------------------------------- * - * Test Synopsis: Test asynchronous cancelation. + * Test Synopsis: Test asynchronous cancelation (alertable or non-alertable). * * Test Method (Validation or Falsification): * - * * Requirements Tested: - * - + * - Async cancel if thread is not blocked (i.e. voluntarily resumes if blocked). * * Features Tested: * - @@ -62,7 +62,8 @@ * * Assumptions: * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock - * pthread_testcancel, pthread_cancel, pthread_join + * pthread_testcancel, pthread_cancel, pthread_join. + * - quserex.dll and alertdrv.sys are not available. * * Pass Criteria: * - Process returns zero exit status. @@ -71,19 +72,19 @@ * - Process returns non-zero exit status. */ -#if defined(_MSC_VER) || defined(__cplusplus) - #include "test.h" /* * Create NUMTHREADS threads in addition to the Main thread. */ -enum { +enum +{ NUMTHREADS = 4 }; typedef struct bag_t_ bag_t; -struct bag_t_ { +struct bag_t_ +{ int threadnum; int started; /* Add more per-thread state variables here */ @@ -93,75 +94,77 @@ struct bag_t_ { static bag_t threadbag[NUMTHREADS + 1]; void * -mythread(void * arg) +mythread (void *arg) { - int result = ((int)PTHREAD_CANCELED + 1); - bag_t * bag = (bag_t *) arg; + int result = ((int) PTHREAD_CANCELED + 1); + bag_t *bag = (bag_t *) arg; - assert(bag == &threadbag[bag->threadnum]); - assert(bag->started == 0); + assert (bag == &threadbag[bag->threadnum]); + assert (bag->started == 0); bag->started = 1; /* Set to known state and type */ - assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0); + assert (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) == 0); - assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); + assert (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); /* * We wait up to 10 seconds, waking every 0.1 seconds, * for a cancelation to be applied to us. */ for (bag->count = 0; bag->count < 100; bag->count++) - Sleep(100); + Sleep (100); return (void *) result; } int -main() +main () { int failed = 0; int i; pthread_t t[NUMTHREADS + 1]; - assert((t[0] = pthread_self()) != NULL); + assert ((t[0] = pthread_self ()) != NULL); for (i = 1; i <= NUMTHREADS; i++) { threadbag[i].started = 0; threadbag[i].threadnum = i; - assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0); + assert (pthread_create (&t[i], NULL, mythread, (void *) &threadbag[i]) + == 0); } /* * Code to control or munipulate child threads should probably go here. */ - Sleep(500); + Sleep (500); for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_cancel(t[i]) == 0); + assert (pthread_cancel (t[i]) == 0); } /* * Give threads time to run. */ - Sleep(NUMTHREADS * 100); + Sleep (NUMTHREADS * 100); /* * Standard check that all threads started. */ for (i = 1; i <= NUMTHREADS; i++) - { + { if (!threadbag[i].started) { failed |= !threadbag[i].started; - fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started); + fprintf (stderr, "Thread %d: started %d\n", i, + threadbag[i].started); } } - assert(!failed); + assert (!failed); /* * Check any results here. Set "failed" and only print output on failure. @@ -177,34 +180,22 @@ main() * a return value of PTHREAD_CANCELED confirms that async * cancelation succeeded. */ - assert(pthread_join(t[i], (void **) &result) == 0); + assert (pthread_join (t[i], (void **) &result) == 0); fail = (result != (int) PTHREAD_CANCELED); if (fail) { - fprintf(stderr, "Thread %d: started %d: count %d\n", - i, - threadbag[i].started, - threadbag[i].count); + fprintf (stderr, "Thread %d: started %d: count %d\n", + i, threadbag[i].started, threadbag[i].count); } failed = (failed || fail); } - assert(!failed); + assert (!failed); /* * Success. */ return 0; } - -#else /* defined(_MSC_VER) || defined(__cplusplus) */ - -int -main() -{ - return 0; -} - -#endif /* defined(_MSC_VER) || defined(__cplusplus) */ diff --git a/tests/cancel4.c b/tests/cancel4.c index 3313ab4..b77f921 100644 --- a/tests/cancel4.c +++ b/tests/cancel4.c @@ -76,8 +76,6 @@ * - Process returns non-zero exit status. */ -#if defined(_MSC_VER) || defined(__cplusplus) - #include "test.h" /* @@ -203,13 +201,3 @@ main() */ return 0; } - -#else /* defined(_MSC_VER) || defined(__cplusplus) */ - -int -main() -{ - return 0; -} - -#endif /* defined(_MSC_VER) || defined(__cplusplus) */ diff --git a/tests/cancel5.c b/tests/cancel5.c index 808ab14..76d0a5a 100644 --- a/tests/cancel5.c +++ b/tests/cancel5.c @@ -72,19 +72,19 @@ * - Process returns non-zero exit status. */ -#if defined(_MSC_VER) || defined(__cplusplus) - #include "test.h" /* * Create NUMTHREADS threads in addition to the Main thread. */ -enum { +enum +{ NUMTHREADS = 4 }; typedef struct bag_t_ bag_t; -struct bag_t_ { +struct bag_t_ +{ int threadnum; int started; /* Add more per-thread state variables here */ @@ -94,33 +94,33 @@ struct bag_t_ { static bag_t threadbag[NUMTHREADS + 1]; void * -mythread(void * arg) +mythread (void *arg) { - int result = ((int)PTHREAD_CANCELED + 1); - bag_t * bag = (bag_t *) arg; + int result = ((int) PTHREAD_CANCELED + 1); + bag_t *bag = (bag_t *) arg; - assert(bag == &threadbag[bag->threadnum]); - assert(bag->started == 0); + assert (bag == &threadbag[bag->threadnum]); + assert (bag->started == 0); bag->started = 1; /* Set to known state and type */ - assert(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) == 0); + assert (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) == 0); - assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); + assert (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); /* * We wait up to 10 seconds, waking every 0.1 seconds, * for a cancelation to be applied to us. */ for (bag->count = 0; bag->count < 100; bag->count++) - Sleep(100); + Sleep (100); return (void *) result; } int -main() +main () { int failed = 0; int i; @@ -130,37 +130,39 @@ main() { threadbag[i].started = 0; threadbag[i].threadnum = i; - assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0); + assert (pthread_create (&t[i], NULL, mythread, (void *) &threadbag[i]) + == 0); } /* * Code to control or munipulate child threads should probably go here. */ - Sleep(500); + Sleep (500); for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_cancel(t[i]) == 0); + assert (pthread_cancel (t[i]) == 0); } /* * Give threads time to run. */ - Sleep(NUMTHREADS * 100); + Sleep (NUMTHREADS * 100); /* * Standard check that all threads started. */ for (i = 1; i <= NUMTHREADS; i++) - { + { if (!threadbag[i].started) { failed |= !threadbag[i].started; - fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started); + fprintf (stderr, "Thread %d: started %d\n", i, + threadbag[i].started); } } - assert(!failed); + assert (!failed); /* * Check any results here. Set "failed" and only print output on failure. @@ -176,34 +178,22 @@ main() * a return value of PTHREAD_CANCELED confirms that async * cancelation succeeded. */ - assert(pthread_join(t[i], (void **) &result) == 0); + assert (pthread_join (t[i], (void **) &result) == 0); fail = (result != (int) PTHREAD_CANCELED); if (fail) { - fprintf(stderr, "Thread %d: started %d: count %d\n", - i, - threadbag[i].started, - threadbag[i].count); + fprintf (stderr, "Thread %d: started %d: count %d\n", + i, threadbag[i].started, threadbag[i].count); } failed = (failed || fail); } - assert(!failed); + assert (!failed); /* * Success. */ return 0; } - -#else /* defined(_MSC_VER) || defined(__cplusplus) */ - -int -main() -{ - return 0; -} - -#endif /* defined(_MSC_VER) || defined(__cplusplus) */ diff --git a/tests/cancel6a.c b/tests/cancel6a.c index 81f8d04..4aea81a 100644 --- a/tests/cancel6a.c +++ b/tests/cancel6a.c @@ -63,8 +63,6 @@ * - Process returns non-zero exit status. */ -#if defined(_MSC_VER) || defined(__cplusplus) - #include "test.h" /* @@ -191,13 +189,3 @@ main() */ return 0; } - -#else /* defined(_MSC_VER) || defined(__cplusplus) */ - -int -main() -{ - return 0; -} - -#endif /* defined(_MSC_VER) || defined(__cplusplus) */ diff --git a/tests/cancel6d.c b/tests/cancel6d.c index cdb09f5..9a69adb 100644 --- a/tests/cancel6d.c +++ b/tests/cancel6d.c @@ -64,8 +64,6 @@ * - Process returns non-zero exit status. */ -#if defined(_MSC_VER) || defined(__cplusplus) - #include "test.h" /* @@ -195,13 +193,3 @@ main() */ return 0; } - -#else /* defined(_MSC_VER) || defined(__cplusplus) */ - -int -main() -{ - return 0; -} - -#endif /* defined(_MSC_VER) || defined(__cplusplus) */ -- cgit v1.2.3