diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ChangeLog | 43 | ||||
| -rw-r--r-- | tests/GNUmakefile | 22 | ||||
| -rw-r--r-- | tests/Makefile | 142 | ||||
| -rw-r--r-- | tests/README | 28 | ||||
| -rw-r--r-- | tests/cancel3.c | 2 | ||||
| -rw-r--r-- | tests/cleanup1.c | 3 | ||||
| -rw-r--r-- | tests/cleanup2.c | 2 | ||||
| -rw-r--r-- | tests/cleanup3.c | 2 | ||||
| -rw-r--r-- | tests/condvar3.c | 2 | ||||
| -rw-r--r-- | tests/condvar4.c | 2 | ||||
| -rw-r--r-- | tests/condvar5.c | 2 | ||||
| -rw-r--r-- | tests/condvar6.c | 2 | ||||
| -rw-r--r-- | tests/condvar7.c | 2 | ||||
| -rw-r--r-- | tests/condvar8.c | 2 | ||||
| -rw-r--r-- | tests/condvar9.c | 2 | ||||
| -rw-r--r-- | tests/exception1.c | 8 | ||||
| -rw-r--r-- | tests/exit1.c | 1 | ||||
| -rw-r--r-- | tests/rwlock6.c | 6 | 
18 files changed, 184 insertions, 89 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog index 7d7cd4a..412c09c 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,46 @@ +2000-08-13  Ross Johnson  <rpj@special.ise.canberra.edu.au> + +	* condvar3.c: Minor change to eliminate compiler +	warning. + +	* condvar4.c: ditto. + +	* condvar5.c: ditto. + +	* condvar6.c: ditto. + +	* condvar7.c: ditto. + +	* condvar8.c: ditto. + +	* condvar9.c: ditto. + +	* exit1.c: Function needed return statement. + +	* cleanup1.c: Remove unnecessary printf arg. + +	* cleanup2.c: Fix cast. + +	* rwlock6.c: Fix casts. + +	* exception1.c (PtW32CatchAll): Had the wrong name; +	fix casts. + +	* cancel3.c: Remove unused waitLock variable. + +	* GNUmakefile: Change library/dll naming; add new tests; +	general minor changes. + +	* Makefile: Change library/dll naming; add targets for +	testing each of the two VC++ EH scheme versions; +	default target now issues help message; compile warnings +	now interpreted as errors to stop the make; add new +	tests; restructure to remove prerequisites needed +	otherwise. + +	* README: Updated. + +  2000-08-10  Ross Johnson  <rpj@special.ise.canberra.edu.au>  	* eyal1.c (main): Change implicit cast to explicit diff --git a/tests/GNUmakefile b/tests/GNUmakefile index 3d86a0f..e8438e2 100644 --- a/tests/GNUmakefile +++ b/tests/GNUmakefile @@ -13,14 +13,14 @@ ECHO	= @echo  #  GLANG   = c++  CC	= gcc -CFLAGS	= -g -O2 -mthreads -UNDEBUG -Wall -x $(GLANG) +CFLAGS	= -g -O0 -mthreads -UNDEBUG -Wall -x $(GLANG)  BUILD_DIR	= ..  INCLUDES	= -I. -LIBS	= -L. -lpthread32 +LIBS	= -L. -lpthreadw32  HDR	= pthread.h semaphore.h sched.h -LIB	= libpthread32.a -DLL	= pthread.dll +LIB	= libpthreadw32.a +DLL	= pthreadGCE.dll  COPYFILES	= $(HDR) $(LIB) $(DLL) @@ -35,7 +35,8 @@ TESTS	= loadfree \  	  condvar3 condvar4 condvar5 condvar6 condvar7 condvar8 condvar9 \  	  errno1 \  	  rwlock1 rwlock2 rwlock3 rwlock4 rwlock5 rwlock6 \ -	  context1 cancel3 cancel4 cleanup1 cleanup2 cleanup3 \ +	  context1 cancel3 cancel4 \ +	  cleanup0 cleanup1 cleanup2 cleanup3 \  	  exception1  PASSES	= $(TESTS:%=%.pass) @@ -43,7 +44,7 @@ PASSES	= $(TESTS:%=%.pass)  all:	$(PASSES)  	@ $(ECHO) ALL TESTS PASSED! Congratulations! -loadfree.pass: +loadfree.pass: pthread.dll  mutex1.pass:  mutex2.pass:  exit1.pass: @@ -82,7 +83,8 @@ rwlock6.pass: rwlock5.pass  context1.pass: cancel2.pass  cancel3.pass: context1.pass  cancel4.pass: cancel3.pass -cleanup1.pass: cancel4.pass +cleanup0.pass: cancel4.pass +cleanup1.pass: cleanup0.pass  cleanup2.pass: cleanup1.pass  cleanup3.pass: cleanup2.pass  exception1.pass: cancel4.pass @@ -105,13 +107,19 @@ $(COPYFILES):  	@ $(ECHO) Copying $@  	@ $(CP) $(BUILD_DIR)\$@ . +pthread.dll: +	@ $(CP) $(DLL) $@ +  clean:  	- $(RM) *.dll +	- $(RM) *.lib  	- $(RM) pthread.h  	- $(RM) semaphore.h  	- $(RM) sched.h  	- $(RM) *.a  	- $(RM) *.e +	- $(RM) *.obj +	- $(RM) *.pdb  	- $(RM) *.exe  	- $(RM) *.pass diff --git a/tests/Makefile b/tests/Makefile index 8143b46..08cfcce 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -9,26 +9,35 @@ TOUCH	= echo Passed >  ECHO	= @echo
  CPHDR	= pthread.h semaphore.h sched.h
 -CPLIB	= pthread.lib
 -CPDLL	= pthread.dll
 -CFLAGS= /W3 /MT /nologo /Yd /Zi -D_WIN32_WINNT=0x400 -DSTDCALL=_stdcall
 +# C++ Exceptions
 +VCEFLAGS	= /GX /TP /DPtW32NoCatchWarn
 +VCELIB	= pthreadVCE.lib
 +VCEDLL	= pthreadVCE.dll
 +# Structured Exceptions
 +VSEFLAGS	=
 +VSELIB	= pthreadVSE.lib
 +VSEDLL	= pthreadVSE.dll
 +
 +CFLAGS= /W3 /WX /MT /nologo /Yd /Zi -D_WIN32_WINNT=0x400
  LFLAGS= /INCREMENTAL:NO
 -LIBS	= .\pthread.lib
  INCLUDES=-I.
  BUILD_DIR=..
  COPYFILES	= $(CPHDR) $(CPLIB) $(CPDLL)
 +TEST		=
 +EHFLAGS	=
 +
  # If a test case returns a non-zero exit code to the shell, make will
  # stop.
  PASSES= loadfree.pass \
 -	  mutex1.pass  condvar1.pass  condvar2.pass  \
 +	  mutex1.pass  mutex2.pass  mutex3.pass \
 +	  condvar1.pass  condvar2.pass  \
  	  exit1.pass  create1.pass  equal1.pass  \
  	  exit2.pass  exit3.pass  \
  	  join0.pass  join1.pass  join2.pass  \
 -	  mutex2.pass  mutex3.pass  \
  	  count1.pass  once1.pass  tsd1.pass  \
  	  self1.pass  self2.pass  \
  	  cancel1.pass  cancel2.pass  \
 @@ -38,78 +47,53 @@ PASSES= loadfree.pass \  	  errno1.pass  \
  	  rwlock1.pass  rwlock2.pass  rwlock3.pass  rwlock4.pass  rwlock5.pass  rwlock6.pass  \
  	  context1.pass  \
 -	  cancel3.pass  cancel4.pass  cleanup1.pass  \
 -	  cleanup2.pass  cleanup3.pass  \
 +	  cancel3.pass  cancel4.pass  \
 +	  cleanup0.pass  cleanup1.pass  cleanup2.pass  cleanup3.pass  \
  	  exception1.pass 
 -all:	$(CPLIB) $(CPDLL) $(CPHDR) $(PASSES)
 -	@ $(ECHO) ALL TESTS PASSED! Congratulations!
 +all:
 +	@ $(ECHO) Run one of the following command lines:
 +	@ $(ECHO) nmake clean VCE   (to test using dll with C++ exception handling)
 +	@ $(ECHO) nmake clean VSE   (to test using dll with structured exception handling)
 -loadfree.pass: loadfree.exe
 -mutex1.pass: mutex1.exe
 -mutex2.pass: mutex2.exe
 -exit1.pass: exit1.exe
 -condvar1.pass: condvar1.exe
 -self1.pass: self1.exe
 -condvar2.pass: condvar2.exe condvar1.pass
 -create1.pass: create1.exe mutex2.pass
 -cancel1.pass: cancel1.exe create1.pass
 -cancel2.pass: cancel2.exe cancel1.pass
 -mutex3.pass: mutex3.exe create1.pass
 -equal1.pass: equal1.exe create1.pass
 -exit2.pass: exit2.exe create1.pass
 -exit3.pass: exit3.exe create1.pass
 -join0.pass: join0.exe create1.pass
 -join1.pass: join1.exe create1.pass
 -join2.pass: join2.exe create1.pass
 -count1.pass: count1.exe join1.pass
 -once1.pass: once1.exe create1.pass
 -tsd1.pass: tsd1.exe join1.pass
 -self2.pass: self2.exe create1.pass
 -eyal1.pass: eyal1.exe tsd1.pass
 -condvar3.pass: condvar3.exe create1.pass
 -condvar4.pass: condvar4.exe create1.pass
 -condvar5.pass: condvar5.exe condvar4.pass
 -condvar6.pass: condvar6.exe condvar5.pass
 -condvar7.pass: condvar7.exe condvar6.pass cleanup1.pass
 -condvar8.pass: condvar8.exe condvar7.pass
 -condvar9.pass: condvar9.exe condvar8.pass
 -errno1.pass: errno1.exe mutex3.pass
 -rwlock1.pass: rwlock1.exe condvar6.pass
 -rwlock2.pass: rwlock2.exe rwlock1.pass
 -rwlock3.pass: rwlock3.exe rwlock2.pass
 -rwlock4.pass: rwlock4.exe rwlock3.pass
 -rwlock5.pass: rwlock5.exe rwlock4.pass
 -rwlock6.pass: rwlock6.exe rwlock5.pass
 -context1.pass: context1.exe cancel2.pass
 -cancel3.pass: cancel3.exe context1.pass
 -cancel4.pass: cancel4.exe cancel3.pass
 -cleanup1.pass: cleanup1.exe cancel4.pass
 -cleanup2.pass: cleanup2.exe cleanup1.pass
 -cleanup3.pass: cleanup3.exe cleanup2.pass
 -exception1.pass: exception1.exe cancel4.pass
 +auto: clean VCE clean VSE
 +
 +tests: $(CPLIB) $(CPDLL) $(CPHDR) $(PASSES)
 +	@ $(ECHO) ALL TESTS PASSED! Congratulations!
  $(PASSES): $*.exe
 +	@ $(ECHO) ... Running $(TEST) test: $*.exe
  	@ .\$*.exe
 -	@ $(ECHO) Passed
 +	@ $(ECHO) ...... Passed
  	@ $(TOUCH) $*.pass
 +VCE:
 +	@ nmake TEST="$@" CPLIB="$(VCELIB)" CPDLL="$(VCEDLL)" EHFLAGS="$(VCEFLAGS)" tests
 +
 +VSE:	
 +	@ nmake TEST="$@" CPLIB="$(VSELIB)" CPDLL="$(VSEDLL)" EHFLAGS="$(VSEFLAGS)" tests
 +
  .c.exe:
 -	@ $(CC) $(CFLAGS) $(INCLUDES) $< /Fe$@ /link $(LFLAGS) $(LIBS)
 +	@ $(ECHO) Compiling $@
 +	@ $(CC) $(EHFLAGS) $(CFLAGS) $(INCLUDES) $< /Fe$@ /link $(LFLAGS) $(CPLIB)
  .c.pre:
 -	@ $(CC) /E $(CFLAGS) $(INCLUDES) /Fe$@ $<
 +	@ $(CC) /E $(EHFLAGS) $(CFLAGS) $(INCLUDES) /Fe$@ $<
  $(COPYFILES):
  	@ $(ECHO) Copying $@
  	@ $(CP) $(BUILD_DIR)\$@ .
 +pthread.dll:
 +	@ $(CP) $(CPDLL) $*.dll
 +	@ $(CP) $(CPLIB) $*.lib
 +
  clean:
  	- $(RM) *.dll
 +	- $(RM) *.lib
  	- $(RM) pthread.h
  	- $(RM) semaphore.h
  	- $(RM) sched.h
 -	- $(RM) *.lib
  	- $(RM) *.e
  	- $(RM) *.obj
  	- $(RM) *.pdb
 @@ -117,3 +101,47 @@ clean:  	- $(RM) *.exe
  	- $(RM) *.pass
 +loadfree.pass: pthread.dll
 +mutex1.pass:
 +mutex2.pass:
 +exit1.pass:
 +condvar1.pass:
 +self1.pass:
 +condvar2.pass: condvar1.pass
 +create1.pass: mutex2.pass
 +cancel1.pass: create1.pass
 +cancel2.pass: cancel1.pass
 +mutex3.pass: create1.pass
 +equal1.pass: create1.pass
 +exit2.pass: create1.pass
 +exit3.pass: create1.pass
 +join0.pass: create1.pass
 +join1.pass: create1.pass
 +join2.pass: create1.pass
 +count1.pass: join1.pass
 +once1.pass: create1.pass
 +tsd1.pass: join1.pass
 +self2.pass: create1.pass
 +eyal1.pass: tsd1.pass
 +condvar3.pass: create1.pass
 +condvar4.pass: create1.pass
 +condvar5.pass: condvar4.pass
 +condvar6.pass: condvar5.pass
 +condvar7.pass: condvar6.pass cleanup1.pass
 +condvar8.pass: condvar7.pass
 +condvar9.pass: condvar8.pass
 +errno1.pass: mutex3.pass
 +rwlock1.pass: condvar6.pass
 +rwlock2.pass: rwlock1.pass
 +rwlock3.pass: rwlock2.pass
 +rwlock4.pass: rwlock3.pass
 +rwlock5.pass: rwlock4.pass
 +rwlock6.pass: rwlock5.pass
 +context1.pass: cancel2.pass
 +cancel3.pass: context1.pass
 +cancel4.pass: cancel3.pass
 +cleanup0.pass: cancel4.pass
 +cleanup1.pass: cleanup0.pass
 +cleanup2.pass: cleanup1.pass
 +cleanup3.pass: cleanup2.pass
 +exception1.pass: cancel4.pass
 diff --git a/tests/README b/tests/README index fa3c0bf..b767f89 100644 --- a/tests/README +++ b/tests/README @@ -1,13 +1,31 @@  Running test cases in this directory  ------------------------------------ -runtest.bat is included for compiling and running tests. +These make scripts expect to be able to copy the dll, libarary +and header files from this directory's parent directory, +which should be the pthreads-win32 source directory. -Usage:	runtest cl|gcc testname +MS VC++ nmake +------------- -	"cl" 		calls the VC++ cl compiler/linker -	"gcc"		calls the GNU gcc compiler/linker -	"testname"	is the name of the C source file without the .c +Run the target corresponding to the DLL version being tested: +  +nmake clean VCE +  +or: +  +nmake clean VSE + + +GNU G++ make +------------ + +Run "make clean" and then "make". See the "Known bugs" section +in ..\README. + + +Writing Test Cases +------------------  Tests written in this test suite should behave in the following manner: diff --git a/tests/cancel3.c b/tests/cancel3.c index e2ffc2b..1a39ecb 100644 --- a/tests/cancel3.c +++ b/tests/cancel3.c @@ -60,8 +60,6 @@ struct bag_t_ {  static bag_t threadbag[NUMTHREADS + 1]; -static pthread_mutex_t waitLock = PTHREAD_MUTEX_INITIALIZER; -  void *  mythread(void * arg)  { diff --git a/tests/cleanup1.c b/tests/cleanup1.c index 2c8e9a6..68478fa 100644 --- a/tests/cleanup1.c +++ b/tests/cleanup1.c @@ -159,10 +159,9 @@ main()        if (fail)  	{ -	  fprintf(stderr, "Thread %d: started %d: count %d: result %d\n", +	  fprintf(stderr, "Thread %d: started %d: result %d\n",  		  i,  		  threadbag[i].started, -		  threadbag[i].count,  		  result);  	}        failed = (failed || fail); diff --git a/tests/cleanup2.c b/tests/cleanup2.c index 515f676..6d07d53 100644 --- a/tests/cleanup2.c +++ b/tests/cleanup2.c @@ -135,7 +135,7 @@ main()        int fail = 0;        int result = 0; -      assert(pthread_join(t[i], (void *) &result) == 0); +      assert(pthread_join(t[i], (void **) &result) == 0);        fail = (result != 0); diff --git a/tests/cleanup3.c b/tests/cleanup3.c index 4f05eea..56b1a8f 100644 --- a/tests/cleanup3.c +++ b/tests/cleanup3.c @@ -138,7 +138,7 @@ main()        int fail = 0;        int result = 0; -      assert(pthread_join(t[i], (void *) &result) == 0); +      assert(pthread_join(t[i], (void **) &result) == 0);        fail = (result != 0); diff --git a/tests/condvar3.c b/tests/condvar3.c index a25c15a..673feb5 100644 --- a/tests/condvar3.c +++ b/tests/condvar3.c @@ -96,7 +96,7 @@ main()    abstime.tv_sec += 5; -  while (! shared > 0) +  while (! (shared > 0))      assert(pthread_cond_timedwait(&cv, &mutex, &abstime) == 0);    assert(shared > 0); diff --git a/tests/condvar4.c b/tests/condvar4.c index 4729063..2ef1d79 100644 --- a/tests/condvar4.c +++ b/tests/condvar4.c @@ -118,7 +118,7 @@ main()    abstime.tv_sec += 5; -  while (! cvthing.shared > 0) +  while (! (cvthing.shared > 0))      assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);    assert(cvthing.shared > 0); diff --git a/tests/condvar5.c b/tests/condvar5.c index d0d15a1..56510c5 100644 --- a/tests/condvar5.c +++ b/tests/condvar5.c @@ -117,7 +117,7 @@ main()    abstime.tv_sec += 5; -  while (! cvthing.shared > 0) +  while (! (cvthing.shared > 0))      assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);    assert(cvthing.shared > 0); diff --git a/tests/condvar6.c b/tests/condvar6.c index 7348346..dc29f48 100644 --- a/tests/condvar6.c +++ b/tests/condvar6.c @@ -93,7 +93,7 @@ mythread(void * arg)    assert(pthread_mutex_lock(&cvthing.lock) == 0); -  while (! cvthing.shared > 0) +  while (! (cvthing.shared > 0))      assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);    assert(cvthing.shared > 0); diff --git a/tests/condvar7.c b/tests/condvar7.c index 3745f02..23e2441 100644 --- a/tests/condvar7.c +++ b/tests/condvar7.c @@ -95,7 +95,7 @@ mythread(void * arg)    pthread_cleanup_push(pthread_mutex_unlock, (void *) &cvthing.lock); -  while (! cvthing.shared > 0) +  while (! (cvthing.shared > 0))      assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);    pthread_cleanup_pop(0); diff --git a/tests/condvar8.c b/tests/condvar8.c index d1076e3..9e63b79 100644 --- a/tests/condvar8.c +++ b/tests/condvar8.c @@ -99,7 +99,7 @@ mythread(void * arg)     */    pthread_cleanup_push(pthread_mutex_unlock, (void *) &cvthing.lock); -  while (! cvthing.shared > 0) +  while (! (cvthing.shared > 0))      assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);    pthread_cleanup_pop(0); diff --git a/tests/condvar9.c b/tests/condvar9.c index 7d24d09..6591554 100644 --- a/tests/condvar9.c +++ b/tests/condvar9.c @@ -100,7 +100,7 @@ mythread(void * arg)     */    pthread_cleanup_push(pthread_mutex_unlock, (void *) &cvthing.lock); -  while (! cvthing.shared > 0) +  while (! (cvthing.shared > 0))      assert(pthread_cond_timedwait(&cvthing.notbusy, &cvthing.lock, &abstime) == 0);    pthread_cleanup_pop(0); diff --git a/tests/exception1.c b/tests/exception1.c index eddd8fb..609e5ed 100644 --- a/tests/exception1.c +++ b/tests/exception1.c @@ -136,8 +136,8 @@ canceledThread(void * arg)      for (count = 0; count < 100; count++)        Sleep(100);    } -#if defined(_MSC_VER) -  AltCatchAll +#if defined(PtW32CatchAll) +  PtW32CatchAll  #else    catch (...)  #endif @@ -192,13 +192,13 @@ main()        int result = 0;  	/* Canceled thread */ -      assert(pthread_join(ct[i], (void *) &result) == 0); +      assert(pthread_join(ct[i], (void **) &result) == 0);        fail = (result != (int) PTHREAD_CANCELED);        failed = (failed || fail);        /* Exception thread */ -      assert(pthread_join(et[i], (void *) &result) == 0); +      assert(pthread_join(et[i], (void **) &result) == 0);        fail = (result != ((int) PTHREAD_CANCELED + 2));        failed = (failed || fail); diff --git a/tests/exit1.c b/tests/exit1.c index 251a46c..06b7692 100644 --- a/tests/exit1.c +++ b/tests/exit1.c @@ -14,4 +14,5 @@ main(int argc, char * argv[])  	/* Not reached */  	assert(0); +	return 0;  } diff --git a/tests/rwlock6.c b/tests/rwlock6.c index 38bc419..7daccd7 100644 --- a/tests/rwlock6.c +++ b/tests/rwlock6.c @@ -53,9 +53,9 @@ main()    Sleep(200);    assert(pthread_create(&wrt2, NULL, wrfunc, NULL) == 0); -  assert(pthread_join(wrt1, (void *) &wr1Result) == 0); -  assert(pthread_join(wrt2, (void *) &wr2Result) == 0); -  assert(pthread_join(rdt, (void *) &rdResult) == 0); +  assert(pthread_join(wrt1, (void **) &wr1Result) == 0); +  assert(pthread_join(wrt2, (void **) &wr2Result) == 0); +  assert(pthread_join(rdt, (void **) &rdResult) == 0);    assert(wr1Result == 10);    assert(wr2Result == 20);  | 
