diff options
| author | rpj <rpj> | 1999-03-08 21:02:20 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 1999-03-08 21:02:20 +0000 | 
| commit | 52f7c3f5ef6d9b70ec385fb390bf27962e68ee3d (patch) | |
| tree | 030c60c1dcddf64c66956490a8b6333e0036a9bd /tests | |
| parent | 1e9697f3e8f5da2f710a98d9ae8ce3105e61a4a6 (diff) | |
Resolve merge conflicts; minor comment changes.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/Makefile | 140 | ||||
| -rw-r--r-- | tests/Template.c | 34 | ||||
| -rw-r--r-- | tests/condvar2.c | 165 | ||||
| -rw-r--r-- | tests/tryentercs.c | 70 | ||||
| -rw-r--r-- | tests/tryentercs2.c | 59 | 
5 files changed, 301 insertions, 167 deletions
| diff --git a/tests/Makefile b/tests/Makefile index dcbb7e0..e5994f6 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,70 +1,70 @@ -# Makefile for the pthreads test suite.
 -# If all of the .pass files can be created, the test suite has passed.
 -
 -
 -CP	= copy
 -RM	= erase
 -MKDIR	= mkdir
 -TOUCH	= echo Passed >
 -ECHO	= @echo
 -
 -#
 -# Mingw32
 -#
 -CC	= gcc
 -CFLAGS	= -g -O2 -UNDEBUG -Wall -o $@ $^
 -BUILD_DIR	= ..
 -INCLUDES	= -I.
 -LIBS	= ./libpthread32.a
 -
 -##
 -## MSVC
 -##
 -#CC	= cl
 -#CFLAGS	= /W3 /MT /nologo /Yd /Zi /Fe$@ $^
 -#BUILD_DIR	= ..
 -#INCLUDES	= -I.
 -#LIBS	= pthread.lib
 -
 -HDR	= pthread.h
 -LIB	= libpthread32.a
 -DLL	= pthread.dll
 -
 -# If a test case returns a non-zero exit code to the shell, make will
 -# stop.
 -
 -TESTS	= count1 create1 equal1 exit1 exit2 exit3 \
 -	 join1 mutex1 mutex2 mutex3 \
 -	 once1 self1 self2 condvar1 condvar2 condvar3 condvar4 tsd1
 -
 -PASSES	= $(TESTS:%=%.pass)
 -
 -all:	$(PASSES)
 -	@ $(ECHO) ALL TESTS PASSED! Congratulations!
 -
 -%.pass: %.exe $(LIB) $(DLL) $(HDR)
 -	$*
 -	@$(ECHO) Passed
 -	@ $(TOUCH) $@
 -
 -%.exe: %.c
 -	@ $(CC) $(CFLAGS) $(INCLUDES) $(LIBS)
 -
 -$(LIB):
 -	@ $(ECHO) Copying the library
 -	@ $(CP) $(BUILD_DIR)\$@ .
 -
 -$(HDR):
 -	@ $(ECHO) Copying the header file
 -	@ $(CP) $(BUILD_DIR)\$@ .
 -
 -$(DLL):
 -	@ $(ECHO) Copying the DLL
 -	@ $(CP) $(BUILD_DIR)\$@ .
 -
 -clean:
 -	- $(RM) *.dll
 -	- $(RM) $(LIB)
 -	- $(RM) $(HDR)
 -	- $(RM) *.exe
 -	- $(RM) *.pass
 +# Makefile for the pthreads test suite. +# If all of the .pass files can be created, the test suite has passed. + + +CP	= copy +RM	= erase +MKDIR	= mkdir +TOUCH	= echo Passed > +ECHO	= @echo + +# +# Mingw32 +# +CC	= gcc +CFLAGS	= -g -O2 -UNDEBUG -Wall -o $@ $^ +BUILD_DIR	= .. +INCLUDES	= -I. +LIBS	= ./libpthread32.a + +## +## MSVC +## +#CC	= cl +#CFLAGS	= /W3 /MT /nologo /Yd /Zi /Fe$@ $^ +#BUILD_DIR	= .. +#INCLUDES	= -I. +#LIBS	= pthread.lib + +HDR	= pthread.h +LIB	= libpthread32.a +DLL	= pthread.dll + +# If a test case returns a non-zero exit code to the shell, make will +# stop. + +TESTS	= count1 create1 equal1 exit1 exit2 exit3 \ +	 join1 mutex1 mutex2 mutex3 \ +	 once1 self1 self2 condvar1 condvar2 condvar3 condvar4 tsd1 + +PASSES	= $(TESTS:%=%.pass) + +all:	$(PASSES) +	@ $(ECHO) ALL TESTS PASSED! Congratulations! + +%.pass: %.exe $(LIB) $(DLL) $(HDR) +	$* +	@$(ECHO) Passed +	@ $(TOUCH) $@ + +%.exe: %.c +	@ $(CC) $(CFLAGS) $(INCLUDES) $(LIBS) + +$(LIB): +	@ $(ECHO) Copying the library +	@ $(CP) $(BUILD_DIR)\$@ . + +$(HDR): +	@ $(ECHO) Copying the header file +	@ $(CP) $(BUILD_DIR)\$@ . + +$(DLL): +	@ $(ECHO) Copying the DLL +	@ $(CP) $(BUILD_DIR)\$@ . + +clean: +	- $(RM) *.dll +	- $(RM) $(LIB) +	- $(RM) $(HDR) +	- $(RM) *.exe +	- $(RM) *.pass diff --git a/tests/Template.c b/tests/Template.c index 0663a85..c98bbac 100644 --- a/tests/Template.c +++ b/tests/Template.c @@ -44,18 +44,18 @@  /*   * Create NUMTHREADS threads in addition to the Main thread.   */ -static enum { +enum {    NUMTHREADS = 2  };  typedef struct bag_t_ bag_t;  struct bag_t_ {    int threadnum; -  int washere; -  /* Add more pre-thread state variables here */ +  int started; +  /* Add more per-thread state variables here */  }; -static bag_t threadbag[NUMTHREADS]; +static bag_t threadbag[NUMTHREADS + 1];  void *  mythread(void * arg) @@ -63,8 +63,8 @@ mythread(void * arg)    bag_t * bag = (bag_t *) arg;    assert(bag == &threadbag[bag->threadnum]); -  assert(bag->washere == 0); -  bag->washere = 1; +  assert(bag->started == 0); +  bag->started = 1;    /* ... */ @@ -80,13 +80,18 @@ main()    assert((t[0] = pthread_self()) != NULL);    for (i = 1; i <= NUMTHREADS; i++) -    {  -      threadbag[i].washere = 0; +    { +      threadbag[i].started = 0;        threadbag[i].threadnum = i;        assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0);      }    /* +   * Code to control or munipulate child threads should probably go here. +   */ + + +  /*     * Give threads time to run.     */    Sleep(NUMTHREADS * 1000); @@ -96,24 +101,25 @@ main()     */    for (i = 1; i <= NUMTHREADS; i++)      {  -      if (threadbag[i].washere != 1) +      failed = !threadbag[i].started; + +      if (failed)  	{ -	  failed = 1; -	  fprintf(stderr, "Thread %d: washere %d\n", i, threadbag[i].washere); +	  fprintf(stderr, "Thread %d: started %d\n", i, threadbag[i].started);  	}      } -  assert(failed == 0); +  assert(!failed);    /* -   * Check any results here. Only print ouput and set "failed" on failure. +   * Check any results here. Set "failed" and only print ouput on failure.     */    for (i = 1; i <= NUMTHREADS; i++)      {         /* ... */      } -  assert(failed == 0); +  assert(!failed);    /*     * Success. diff --git a/tests/condvar2.c b/tests/condvar2.c index 66f3d7b..09e4576 100644 --- a/tests/condvar2.c +++ b/tests/condvar2.c @@ -1,83 +1,82 @@ -/*
 - * File: condvar1.c
 - *
 - * Test Synopsis:
 - * - Test timed wait on a CV.
 - *
 - * Test Method (Validation or Falsification):
 - * - Validation
 - *
 - * Requirements Tested:
 - * - 
 - *
 - * Features Tested:
 - * - 
 - *
 - * Cases Tested:
 - * - 
 - *
 - * Description:
 - * - Because the CV is never signaled, we expect the wait to time out.
 - *
 - * Environment:
 - * -
 - *
 - * Input:
 - * - None.
 - *
 - * Output:
 - * - File name, Line number, and failed expression on failure.
 - * - No output on success.
 - *
 - * Assumptions:
 - * - 
 - *
 - * Pass Criteria:
 - * - pthread_cond_timedwait returns ETIMEDOUT.
 - * - Process returns zero exit status.
 - *
 - * Fail Criteria:
 - * - pthread_cond_timedwait does not return ETIMEDOUT.
 - * - Process returns non-zero exit status.
 - */
 -
 -#include "test.h"
 -#include <sys/timeb.h>
 -
 -pthread_cond_t cv;
 -pthread_mutex_t mutex;
 -
 -int
 -main()
 -{
 -  struct timespec abstime = { 0, 0 };
 -#if defined(__MINGW32__)
 -  struct timeb currSysTime;
 -#else
 -  struct _timeb currSysTime;
 -#endif
 -  const DWORD NANOSEC_PER_MILLISEC = 1000000;
 -
 -  assert(pthread_cond_init(&cv, NULL) == 0);
 -
 -  assert(pthread_mutex_init(&mutex, NULL) == 0);
 -
 -  assert(pthread_mutex_lock(&mutex) == 0);
 -
 -  /* get current system time */
 -  _ftime(&currSysTime);
 -
 -  abstime.tv_sec = currSysTime.time;
 -  abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm;
 -
 -  abstime.tv_sec += 5;
 -
 -  assert(pthread_cond_timedwait(&cv, &mutex, &abstime) == ETIMEDOUT);
 -  
 -  assert(pthread_mutex_unlock(&mutex) == 0);
 -
 -  assert(pthread_cond_destroy(&cv) == 0);
 -
 -  return 0;
 -}
 -
 +/* + * File: condvar1.c + * + * Test Synopsis: + * - Test timed wait on a CV. + * + * Test Method (Validation or Falsification): + * - Validation + * + * Requirements Tested: + * -  + * + * Features Tested: + * -  + * + * Cases Tested: + * -  + * + * Description: + * - Because the CV is never signaled, we expect the wait to time out. + * + * Environment: + * - + * + * Input: + * - None. + * + * Output: + * - File name, Line number, and failed expression on failure. + * - No output on success. + * + * Assumptions: + * -  + * + * Pass Criteria: + * - pthread_cond_timedwait returns ETIMEDOUT. + * - Process returns zero exit status. + * + * Fail Criteria: + * - pthread_cond_timedwait does not return ETIMEDOUT. + * - Process returns non-zero exit status. + */ + +#include "test.h" +#include <sys/timeb.h> + +pthread_cond_t cv; +pthread_mutex_t mutex; + +int +main() +{ +  struct timespec abstime = { 0, 0 }; +#if defined(__MINGW32__) +  struct timeb currSysTime; +#else +  struct _timeb currSysTime; +#endif +  const DWORD NANOSEC_PER_MILLISEC = 1000000; + +  assert(pthread_cond_init(&cv, NULL) == 0); + +  assert(pthread_mutex_init(&mutex, NULL) == 0); + +  assert(pthread_mutex_lock(&mutex) == 0); + +  /* get current system time */ +  _ftime(&currSysTime); + +  abstime.tv_sec = currSysTime.time; +  abstime.tv_nsec = NANOSEC_PER_MILLISEC * currSysTime.millitm; + +  abstime.tv_sec += 5; + +  assert(pthread_cond_timedwait(&cv, &mutex, &abstime) == ETIMEDOUT); +   +  assert(pthread_mutex_unlock(&mutex) == 0); + +  assert(pthread_cond_destroy(&cv) == 0); + +  return 0; +} diff --git a/tests/tryentercs.c b/tests/tryentercs.c new file mode 100644 index 0000000..1125611 --- /dev/null +++ b/tests/tryentercs.c @@ -0,0 +1,70 @@ +/* + * tryentercs.c + * + * See if we have the TryEnterCriticalSection function. + * Does not use any part of pthreads. + */ + +#include <windows.h> +#include<process.h> +#include <stdio.h> + +/* + * Function pointer to TryEnterCriticalSection if it exists + * - otherwise NULL + */ +BOOL (WINAPI *_try_enter_critical_section)(LPCRITICAL_SECTION) = +NULL; + +/* + * Handle to kernel32.dll + */ +static HINSTANCE _h_kernel32; + + +int +main() +{ +  CRITICAL_SECTION cs; + +  SetLastError(0); + +  printf("Last Error [main enter] %ld\n", (long) GetLastError()); + +  /* +   * Load KERNEL32 and try to get address of TryEnterCriticalSection +   */ +  _h_kernel32 = LoadLibrary(TEXT("KERNEL32.DLL")); +  _try_enter_critical_section = +        (BOOL (PT_STDCALL *)(LPCRITICAL_SECTION)) +        GetProcAddress(_h_kernel32, +                         (LPCSTR) "TryEnterCriticalSection"); + +  if (_try_enter_critical_section != NULL) +    { +      InitializeCriticalSection(&cs); + +      SetLastError(0); + +      if ((*_try_enter_critical_section)(&cs) != 0) +        { +          LeaveCriticalSection(&cs); +        } +	else +	  { +	    printf("Last Error [try enter] %ld\n", (long) GetLastError()); + +	    _try_enter_critical_section = NULL; +	  } +      DeleteCriticalSection(&cs); +    } + +  (void) FreeLibrary(_h_kernel32); + +  printf("This system %s TryEnterCriticalSection.\n", +         (_try_enter_critical_section == NULL) ? "DOES NOT SUPPORT" : "SUPPORTS"); +  printf("POSIX Mutexes will be based on Win32 %s.\n", +         (_try_enter_critical_section == NULL) ? "Mutexes" : "Critical Sections"); + +  return(0); +}
\ No newline at end of file diff --git a/tests/tryentercs2.c b/tests/tryentercs2.c new file mode 100644 index 0000000..adce6df --- /dev/null +++ b/tests/tryentercs2.c @@ -0,0 +1,59 @@ +/* + * tryentercs.c + * + * See if we have the TryEnterCriticalSection function. + * Does not use any part of pthreads. + */ + +#include <windows.h> +#include<process.h> +#include <stdio.h> + +/* + * Function pointer to TryEnterCriticalSection if it exists + * - otherwise NULL + */ +BOOL (WINAPI *_try_enter_critical_section)(LPCRITICAL_SECTION) = NULL; + +/* + * Handle to kernel32.dll + */ +static HINSTANCE _h_kernel32; + + +int +main() +{ +  LPCRITICAL_SECTION lpcs = NULL; + +  SetLastError(0); + +  printf("Last Error [main enter] %ld\n", (long) GetLastError()); + +  /* +   * Load KERNEL32 and try to get address of TryEnterCriticalSection +   */ +  _h_kernel32 = LoadLibrary(TEXT("KERNEL32.DLL")); +  _try_enter_critical_section = +        (BOOL (PT_STDCALL *)(LPCRITICAL_SECTION)) +        GetProcAddress(_h_kernel32, +                         (LPCSTR) "TryEnterCriticalSection"); + +  if (_try_enter_critical_section != NULL) +    { +      SetLastError(0); + +      (*_try_enter_critical_section)(lpcs); + +      printf("Last Error [try enter] %ld\n", (long) GetLastError()); +    } + +  (void) FreeLibrary(_h_kernel32); + +  printf("This system %s TryEnterCriticalSection.\n", +         (_try_enter_critical_section == NULL) ? "DOES NOT SUPPORT" : "SUPPORTS"); +  printf("POSIX Mutexes will be based on Win32 %s.\n", +         (_try_enter_critical_section == NULL) ? "Mutexes" : "Critical Sections"); + +  return(0); +}
\ No newline at end of file | 
