diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ChangeLog | 40 | ||||
| -rw-r--r-- | tests/GNUmakefile | 46 | ||||
| -rw-r--r-- | tests/Makefile | 34 | ||||
| -rw-r--r-- | tests/cancel3.c | 71 | ||||
| -rw-r--r-- | tests/cancel4.c | 12 | ||||
| -rw-r--r-- | tests/cancel5.c | 62 | ||||
| -rw-r--r-- | tests/cancel6a.c | 12 | ||||
| -rw-r--r-- | tests/cancel6d.c | 12 | 
8 files changed, 141 insertions, 148 deletions
| 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  <rpj@callisto.canberra.edu.au>
 + +	* 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  <rpj@callisto.canberra.edu.au>
 + +	* Wmakefile: New makefile for Watcom testing. +  2003-09-18  Ross Johnson  <rpj@callisto.canberra.edu.au>
 -	* 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  <rpj@callisto.canberra.edu.au>
 -	* 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  <rpj@callisto.canberra.edu.au>
 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) */ | 
