2010-06-19  Ross Johnson <Ross dot Johnson at homemail dot com dot au>

	* Makefile (STATICRESULTS): Add all tests into suite for static
	library.
	* GNUmakefile (STATICTESTS): Likewise, except for openmp1.c which
	has a DLL dependency.

2010-02-04  Ross Johnson <Ross dot Johnson at homemail dot com dot au>

	* openmp1.c: New; for libgomp compatibility (OpenMP).
	* barrier5.c: Rewrite after changes to barriers.
	* barrier6.c: New.
	* benchtest6.c: New; timing barriers.
	* GNUMakefile: Update for new tests.
	* Makefile: Ditto.
	* BMakefile: Ditto.
	* once3.c: Improve cancelation testing.
	* stress1.c: Fix comment.

2007-01-04  Ross Johnson <Ross dot Johnson at homemail dot com dot au>

        * context1.c: Include context.h from library sources and remove
        x86 dependence in main().

2005-06-12  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* stress1.c (millisecondsFromNow): Remove limit 0 <= millisecs < 1000;
	now works for -INT_MAX <= millisecs <= INT_MAX; not needed for
	stress1.c but should be general anyway.

2005-05-18  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* reuse2.c (main): Must use a read with memory barrier semantics
	when polling 'done' to force the cache into coherence on MP systems.

2005-05-15  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* detach1.c: New test.
	* join1.c: Reduce sleep times.
	* join0.c: Remove MSVCRT conditional compile - join should always
	return the thread exit code.
	* join1.c: Likewise.
	* join2.c: Likewise.
	* join3.c: Likewise.

2005-04-18  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* condvar3.c: Remove locks from around signalling calls - should not
	be required for normal operation and only serve to mask deficiencies;
	ensure that CV destruction is not premature after removing guards.
	* condvar3_1.c: Likewise.
	* condvar3_2.c: Likewise.
	* condvar3_3.c: Likewise.
	* condvar4.c: Likewise.
	* condvar5.c: Likewise.
	* condvar6.c: Likewise.
	* condvar7.c: Likewise.
	* condvar8.c: Likewise.
	* condvar9.c: Likewise.

2005-04-11  Ross Johnson  <rpj@callisto.canberra.edu.au>

        * once4.c: New test; tries to test priority adjustments
        in pthread_once(); set priority class to realtime so that
        any failures can be seen.

2005-04-06  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* cleanup0.c: Fix unguarded global variable accesses.
	* cleanup1.c: Likewise.
	* cleanup2.c: Likewise.
	* cleanup3.c: Likewise.
	* once2.c: Likewise.
	* once3.c: Likewise.

2005-04-01  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* GNUmakefile: Add target to test linking static link library.
	* Makefile: Likewise.
	* self1.c: Run process attach/detach routines when static linked.

2005-03-16  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* mutex5.c: Prevent optimiser from removing asserts.

2005-03-12  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* once3.c: New test.

2005-03-08  Ross Johnson  <rpj@callisto.canberra.edu.au>

        * once2.c: New test.

2004-11-19  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* Bmakefile: New makefile for Borland.
	* Makefile (DLL_VER): Added.
	* GNUmakefile (DLL_VER): Added.
	* Wmakefile (DLL_VER): Added.

2004-10-29  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* semaphore4.c: New test.
	* semaphore4t.c: New test.
	* Debug.dsp (et al): Created MSVC Workspace project to aid debugging.
	* All: Many tests have been modified to work with the new pthread
	ID type; some other corrections were made after some library
	functions were semantically strengthened. For example,
	pthread_cond_destroy() no longer destroys a busy CV, which
	required minor redesigns of some tests, including some where
	the mutex associated with the CV was not locked during
	signaling and broadcasting.

2004-10-23  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* condvar3.c: Fixed mutex operations that were incorrectly
	placed in relation to their condition variable operations.
	The error became evident after sem_destroy() was rewritten
	and conditions for destroing the semaphore were tightened.
	As a result, pthread_cond_destroy() was not able to
	destroy the cv queueing sempahore.
	* condvar3_1.c: Likewise.
	* condvar3_2.c: Likewise.
	* condvar4.c: Likewise.
	* condvar5.c: Likewise.
	* condvar6.c: Likewise.
	* condvar7.c: Likewise.
	* condvar8.c: Likewise.
	* condvar9.c: Likewise.

2004-10-19  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* semaphore3.c: New test.

2004-10-14  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* rwlock7.c (main): Tidy up statistics reporting; randomise
	update accesses.
	* rwlock8.c: New test.

2004-09-08  Alexandre Girao  <alexgirao@gmail.com>

	* cancel7.c (main): Win98 wants a valid (non-NULL) location
	for the last arg of _beginthreadex().
	* cancel8.c (main): Likewise.
	* exit4.c (main): Likewise.
	* exit5.c (main): Likewise.

2004-08-26  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* create3.c: New test.

2004-06-21  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* mutex2r.c: New test.
	* mutex2e.c: New test.
	* mutex3r.c: New test.
	* mutex3e.c: New test.
	* mutex6s.c: New test.
	* mutex6rs.c: New test.
	* mutex6es.c: New test.

2004-05-21  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* join3.c: New test.

2004-05-16  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* condvar2.c (WIN32_WINNT): Define to avoid redefinition warning
	from inclusion of implement.h.
	* convar2_1.c: Likewise.
	* condvar3_1.c: Likewise.
	* condvar3_2.c: Likewise.
	* context1.c: Likewise.
	* sizes.c: Likewise.
	* Makefile: Don't define _WIN32_WINNT on compiler command line.
	* GNUmakefile: Likewise.
	* priority1.c (main): Add column to output for actual win32
	priority.

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.

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.

2003-09-03  Ross Johnson  <rpj@callisto.canberra.edu.au>

	* exit4.c: New test.
	* exit5.c: New test.
	* cancel7.c: New test.
	* cancel8.c: New test.

2003-08-13  Ross Johnson  <rpj@ise.canberra.edu.au>

	* reuse1.c: New test.
	* reuse1.c: New test.
	* valid1.c: New test.
	* valid2.c: New test.
	* kill1.c: New test.
 	* create2.c: Now included in test regime.

2003-07-19  Ross Johnson  <rpj@ise.canberra.edu.au>

	* eyal1.c (waste_time): Make threads do more work to ensure that
	all threads get to do some work.
	* semaphore1.c: Make it clear that certain errors are expected.
	* exception2.c (non_MSVC code sections): Change to include
	C++ standard include file, i.e. change <new.h> to <exception>.
	* exception3.c (non_MSVC code sections): Likewise; qualify std::
	namespace entities where necessary.
	* GNUmakefile: modified to work in the MsysDTK (newer MinGW)
	environment; define CC as gcc or g++ as appropriate because
	using gcc -x c++ doesn't link with required c++ libs by default,
	but g++ does.

2002-12-11  Ross Johnson  <ross@special.ise.canberra.edu.au>

	* mutex7e.c: Assert EBUSY return instead of EDEADLK.

2002-06-03  Ross Johnson  <rpj@digit.ise.canberra.edu.au>

	* semaphore2.c: New test.

2002-03-02  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* Makefile (CFLAGS): Changed /MT to /MD to link with
	the correct library MSVCRT.LIB. Otherwise errno doesn't
	work.

2002-02-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* exception3.c: Correct recent change.

	* semaphore1.c: New test.

	* Makefile: Add rule to generate pre-processor output.

2002-02-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* exception3.c (terminateFunction): For MSVC++, call
	exit() rather than pthread_exit(). Add comments to explain
	why.
	   * Notes from the MSVC++ manual:
	   *       1) A term_func() should call exit(), otherwise
	   *          abort() will be called on return to the caller.
	   *          abort() raises SIGABRT. The default signal handler
	   *          for all signals terminates the calling program with
	   *          exit code 3.
	   *       2) A term_func() must not throw an exception. Therefore
	   *          term_func() should not call pthread_exit() if an
	   *          an exception-using version of pthreads-win32 library
	   *          is being used (i.e. either pthreadVCE or pthreadVSE).


2002-02-23  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* rwlock2_t.c: New test.
	* rwlock3_t.c: New test.
	* rwlock4_t.c: New test.
	* rwlock5_t.c: New test.
	* rwlock6_t.c: New test.
	* rwlock6_t2.c: New test.
	* rwlock6.c (main): Swap thread and result variables
	to correspond to actual thread functions.
	* rwlock1.c: Change test description comment to correspond
	to the actual test.

	* condvar1_2.c: Loop over the test many times in the hope
	of detecting any intermittent deadlocks. This is to
	test a fixed problem in pthread_cond_destroy.c.

	* spin4.c: Remove unused variable.

2002-02-17  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* condvar1_1.c: New test.
	* condvar1_2.c: New test.

2002-02-07  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* delay1.c: New test.
	* delay2.c: New test.
	* exit4.c: New test.

2002-02-02  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* mutex8: New test.
	* mutex8n: New test.
	* mutex8e: New test.
	* mutex8r: New test.
	* cancel6a: New test.
	* cancel6d: New test.
	* cleanup0.c: Add pragmas for inline optimisation control.
	* cleanup1.c: Add pragmas for inline optimisation control.
	* cleanup2.c: Add pragmas for inline optimisation control.
	* cleanup3.c: Add pragmas for inline optimisation control.
	* condvar7.c: Add pragmas for inline optimisation control.
	* condvar8.c: Add pragmas for inline optimisation control.
	* condvar9.c: Add pragmas for inline optimisation control.

2002-01-30  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* cleanup1.c (): Must be declared __cdecl when compiled
	as C++ AND testing the standard C library version.

2002-01-16  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* spin4.c (main): Fix renamed function call.

2002-01-14  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* exception3.c (main): Shorten wait time.

2002-01-09  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* mutex7.c: New test.
	* mutex7n.c: New test.
	* mutex7e.c: New test.
	* mutex7r.c: New test.
	* mutex6.c: Modified to avoid leaving the locked mutex
	around on exit.

2001-10-25  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>

	* condvar2.c: Remove reference to cv->nWaitersUnblocked.
	* condvar2_1.c: Likewise; lower NUMTHREADS from 60 to 30.
	* condvar3_1.c: Likewise.
	* condvar3_2.c: Likewise.
	* count1.c: lower NUMTHREADS from 60 to 30.
	* inherit1.c: Determine valid priority values and then
	assert values returned by POSIX routines are the same.
	* priority1.c: Likewise.
	* priority2.c: Likewise.
	
2001-07-12  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>

	* barrier5.c: Assert that precisely one thread receives
	PTHREAD_BARRIER_SERIAL_THREAD at each barrier.

2001-07-09  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>

	* barrier3.c: Fixed.
	* barrier4.c: Fixed.
	* barrier5.c: New; proves that all threads in the group
	reaching the barrier wait and then resume together. Repeats the test
	using groups of 1 to 16 threads. Each group of threads must negotiate
	a large number of barriers (10000).
	* spin4.c: Fixed.
	* test.h (error_string): Modified the success (0) value.

2001-07-07  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>

	* spin3.c: Changed test and fixed.
	* spin4.c: Fixed.
	* barrier3.c: Fixed.
	* barrier4.c: Fixed.

2001-07-05  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* spin1.c: New; testing spinlocks.
	* spin2.c: New; testing spinlocks.
	* spin3.c: New; testing spinlocks.
	* spin4.c: New; testing spinlocks.
	* barrier1.c: New; testing barriers.
	* barrier2.c: New; testing barriers.
	* barrier3.c: New; testing barriers.
	* barrier4.c: New; testing barriers.
	* GNUmakefile: Add new tests.
	* Makefile: Add new tests.

2001-07-01  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* benchtest3.c: New; timing mutexes.
	* benchtest4.c: New; time mutexes.
	* condvar3_1.c: Fixed bug - Alexander Terekhov
	* condvar3_3.c: New test.

2001-06-25  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* priority1.c: New test.
	* priority2.c: New test.
	* inherit1.c: New test.
	* benchtest1.c: New; timing mutexes.
	* benchtest2.c: New; timing mutexes.
	* mutex4.c: Modified to test all mutex types.

2001-06-8  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* mutex5.c: Insert inert change to quell compiler warnings.
	* condvar3_2.c: Remove unused variable.
	
2001-06-3  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* condvar2_1.c: New test.
	* condvar3_1.c: New test.
	* condvar3_2.c: New test.

2001-05-30  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* mutex1n.c: New test.
	* mutex1e.c: New test.
	* mutex1r.c: New test.
	* mutex4.c: Now locks and unlocks a mutex.
	* mutex5.c: New test.
	* mutex6.c: New test.
	* mutex6n.c: New test.
	* mutex6e.c: New test.
	* mutex6r.c: New test.
	* Makefile: Added new tests; reorganised.
	* GNUmakefile: Likewise.
	* rwlock6.c: Fix to properly prove read-while-write locking
	and single writer locking.

2001-05-29  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* Makefile: Reorganisation.
	* GNUmakefile: Likewise.
	- Thomas Pfaff <tpfaff@gmx.net>

	* exception1.c: Add stdio.h include to define fprintf and stderr
	in non-exception C version of main().
	* exception2.c: Likewise.
	* exception3.c: Likewise.

	* Makefile (rwlock7): Add new test.
	* GNUmakefile (rwlock7): Add new test.
	* rwlock7.c: New test.
	* rwlock6.c: Changed to test that writer has priority.

	* eyal1.c (main): Unlock each mutex_start lock before destroying
	it.

2000-12-29  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* GNUmakefile: Add mutex4 test; ensure libpthreadw32.a is
	removed for "clean" target.
	* Makefile: Add mutex4 test.

	* exception3.c: Remove SEH code; automatically pass the test
	under SEH (which is an N/A environment).

	* mutex4.c: New test.

	* eyal1.c (do_work_unit): Add a dummy "if" to force the
	optimiser to retain code; reduce thread work loads.

	* condvar8.c (main): Add an additional "assert" for debugging;
	increase pthread_cond_signal timeout.

2000-12-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* eyal1.c: Increase thread work loads.
	* exception2.c: New test.
	* exception3.c: New test.
	* Makefile: Add new tests exception2.c and exception3.c.
	* GNUmakefile: Likewise.

2000-12-11  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* cleanup3.c: Remove unused variable.
	* cleanup2.c: Likewise.
	* exception1.c: Throw an exception rather than use
	a deliberate zero divide so that catch(...) will
	handle it under Mingw32. Mingw32 now builds the
	library correctly to pass all tests - see Thomas
	Pfaff's detailed instructions re needed changes
	to Mingw32 in the Pthreads-Win32 FAQ.

2000-09-08  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* cancel5.c: New; tests calling pthread_cancel()
	from the main thread without first creating a
	POSIX thread struct for the non-POSIX main thread
	- this forces pthread_cancel() to create one via
	pthread_self().
	* Makefile (cancel5): Add new test.
	* GNUmakefile (cancel5): Likewise.

2000-08-17  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* create2.c: New; Test that pthread_t contains
	the W32 HANDLE before it calls the thread routine
	proper.

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
	cast when passing "print_server" function pointer;
	G++ no longer allows implicit func parameter casts.

	* cleanup1.c: Remove unused "waitLock".
	(main): Fix implicit parameter cast.

	* cancel2.c (main): Fix implicit parameter cast.

	* cancel4.c (main): Fix implicit parameter cast.

	* cancel3.c (main): Fix implicit parameter cast.

	* GNUmakefile: Renamed from Makefile; Add missing
	cancel1 and cancel2 test targets.

	* Makefile: Converted for use with MS nmake.

2000-08-06  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* ccl.bat: Add /nologo to remove extraneous output.

	* exception1.c (exceptionedThread): Init 'dummy';
	put expression into if condition to prevent optimising away;
	remove unused variable.

	* cancel4.c (mythread): Cast return value to avoid warnings.

	* cancel2.c (mythread): Missing #endif.

	* condvar9.c (mythread): Cast return value to avoid warnings.

	* condvar8.c (mythread): Cast return value to avoid warnings.

	* condvar7.c (mythread): Cast return value to avoid warnings.

	* cleanup3.c (mythread): Cast return value to avoid warnings.

	* cleanup2.c (mythread): Cast return value to avoid warnings.

	* cleanup1.c (mythread): Cast return value to avoid warnings.

	* condvar5.c (mythread): Cast return value to avoid warnings.

	* condvar3.c (mythread): Cast return value to avoid warnings.

	* condvar6.c (mythread): Cast return value to avoid warnings.

	* condvar4.c (mythread): Cast return value to avoid warnings.

2000-08-05  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* cancel2.c: Use PtW32CatchAll macro if defined.

	* exception1.c: Use PtW32CatchAll macro if defined.

2000-08-02  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* tsd1.c: Fix typecasts of &result [g++ is now very fussy].
	
	* test.h (assert): Return 0's explicitly to allay
	g++ errors.
	
	* join2.c: Add explicit typecasts.
	
	* join1.c: Add explicit typecasts.
	
	* join0.c: Add explicit typecasts.
	
	* eyal1.c: Add explicit typecasts.
	
	* count1.c (main): Add type cast to remove g++ parse warning
	[gcc-2.95.2 seems to have tightened up on this].

	* Makefile (GLANG): Use c++ explicitly.
	Remove MSVC sections (was commented out).
	Add target to generate cpp output.

2000-07-25  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* runtest.bat: modified to work under W98.
	
	* runall.bat: Add new tests; modified to work under W98.
	It was ok under NT.

	* Makefile: Add new tests.

	* exception1.c: New; Test passing exceptions back to the
	application and retaining library internal exceptions.

	* join0.c: New; Test a single join.

2000-01-06  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* cleanup1.c: New; Test cleanup handler executes (when thread is
	canceled).

	* cleanup2.c: New; Test cleanup handler executes (when thread is
	not canceled).

	* cleanup3.c: New; Test cleanup handler does not execute
	(when thread is not canceled).

2000-01-04  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* cancel4.c: New; Test cancelation does not occur in deferred
	cancelation threads with no cancelation points.

	* cancel3.c: New; Test asynchronous cancelation.

	* context1.c: New; Test context switching method for async
	cancelation.

1999-11-23  Ross Johnson  <rpj@special.ise.canberra.edu.au>

	* test.h: Add header includes; include local header versions rather
	than system versions; rearrange the assert macro defines.

1999-11-07  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* loadfree.c: New. Test loading and freeing the library (DLL).

1999-10-30  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* cancel1.c: New. Test pthread_setcancelstate and
	pthread_setcanceltype functions.
	* eyal1.c (waste_time): Change calculation to avoid FP exception
	on Aplhas
	- Rich Peters <rpeters@micro-magic.com>

Oct 14 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* condvar7.c: New. Test broadcast after waiting thread is canceled.
	* condvar8.c: New. Test multiple broadcasts.
	* condvar9.c: New. Test multiple broadcasts with thread
	cancelation.
	
Sep 16 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* rwlock6.c: New test.

Sep 15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* rwlock1.c: New test.
	* rwlock2.c: New test.
	* rwlock3.c: New test.
	* rwlock4.c: New test.
	* rwlock5.c: New test.

Aug 22 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* runall.bat (join2): Add test.

Aug 19 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* join2.c: New test.

Wed Aug 12 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* Makefile (LIBS): Add -L.

Mon May 31 10:25:01 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* Makefile (GLANG): Add GCC language option.

Sat May 29 23:29:04 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* runall.bat (condvar5): Add new test.

	* runall.bat (condvar6): Add new test.

	* Makefile (condvar5) : Add new test.
	
	* Makefile (condvar6) : Add new test.
	
	* condvar5.c: New test for pthread_cond_broadcast().

	* condvar6.c: New test for pthread_cond_broadcast().

Sun Apr  4 12:04:28 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* tsd1.c (mythread): Change Sleep(0) to sched_yield().
	(sched.h): Include.

	* condvar3.c (mythread): Remove redundant Sleep().

	* runtest.bat: Re-organised to make more informative.

Fri Mar 19 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* *.bat: redirect unwanted output to nul:

	* runall.bat: new.

	* cancel1.c: new. Not part of suite yet.
	
Mon Mar 15 00:17:55 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* mutex1.c: only test mutex init and destroy; add assertions.

	* count1.c: raise number of spawned threads to 60 (appears to
	be the limit under Win98).

Sun Mar 14 21:31:02 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* test.h (assert): add assertion trace option.
	Use:
	"#define ASSERT_TRACE 1" to turn it on,
	"#define ASSERT_TRACE 0" to turn it off (default).

	* condvar3.c (main): add more assertions.

	* condvar4.c (main): add more assertions.

	* condvar1.c (main): add more assertions.

Fri Mar 12 08:34:15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* condvar4.c (cvthing): switch the order of the INITIALIZERs.

	* eyal1.c (main): Fix trylock loop; was not waiting for thread to lock
	the "started" mutex.

Wed Mar 10 10:41:52 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* tryentercs.c: Apply typo patch from bje.

	* tryentercs2.c: Ditto.

Sun Mar  7 10:41:52 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* Makefile (condvar3, condvar4): Add tests.

	* condvar4.c (General): Reduce to simple test case; prerequisite
	is condvar3.c; add description.

	* condvar3.c (General): Reduce to simple test case; prerequisite
	is condvar2.c; add description.

	* condvar2.c (General): Reduce to simple test case; prerequisite
	is condvar1.c; add description.

	* condvar1.c (General): Reduce to simple test case; add
	description.

	* Template.c (Comments): Add generic test detail.

1999-02-23  Ross Johnson  <rpj@ise.canberra.edu.au>

        * Template.c: Revamp.

        * condvar1.c: Add.

        * condvar2.c: Add.

        * Makefile: Add condvar1 condvar2 tests.

        * exit1.c, exit2.c, exit3.c: Cosmetic changes.

1999-02-23  Ross Johnson  <rpj@ise.canberra.edu.au>

	* Makefile: Some refinement.

	* *.c: More exhaustive checking through assertions; clean up;
	add some more tests.

	* Makefile: Now actually runs the tests.

	* tests.h: Define our own assert macro. The Mingw32
	version pops up a dialog but we want to run non-interactively.

	* equal1.c: use assert a little more directly so that it
	prints the actual call statement.

	* exit1.c: Modify to return 0 on success, 1 on failure.

1999-02-22  Ross Johnson  <rpj@ise.canberra.edu.au>

	* self2.c: Bring up to date.

	* self3.c: Ditto.

1999-02-21  Ben Elliston  <bje@cygnus.com>

	* README: Update.

	* Makefile: New file. Run all tests automatically. Primitive tests
	are run first; more complex tests are run last.

	* count1.c: New test. Validate the thread count.

	* exit2.c: Perform a simpler test.
	
	* exit3.c: New test. Replaces exit2.c, since exit2.c needs to
	perform simpler checking first.

	* create1.c: Update to use the new testsuite exiting convention.
	
	* equal1.c: Likewise.

	* mutex1.c: Likewise.

	* mutex2.c: Likewise.

	* once1.c: Likewise.

	* self2.c: Likewise.

	* self3.c: Likewise.

	* tsd1.c: Likewise.

1999-02-20  Ross Johnson  <rpj@ise.canberra.edu.au>

	* mutex2.c: Test static mutex initialisation.

	* test.h: New. Declares a table mapping error numbers to
	error names.

1999-01-17  Ross Johnson  <rpj@ise.canberra.edu.au>

	* runtest: New script to build and run a test in the tests directory.

Wed Dec 30 11:22:44 1998  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* tsd1.c: Re-written. See comments at start of file.
	* Template.c: New. Contains skeleton code and comment template
	intended to fully document the test.

Fri Oct 16 17:59:49 1998  Ross Johnson  <rpj@swan.canberra.edu.au>

	* tsd1.c (destroy_key): Add function. Change diagnostics.

Thu Oct 15 17:42:37 1998  Ross Johnson  <rpj@swan.canberra.edu.au>

	* tsd1.c (mythread): Fix some casts and add some message
	output. Fix inverted conditional.

Mon Oct 12 02:12:29 1998  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>

	* tsd1.c: New. Test TSD using 1 key and 2 threads.

1998-09-13  Ben Elliston  <bje@cygnus.com>

	* eyal1.c: New file; contributed by Eyal Lebedinsky
	<eyal@eyal.emu.id.au>.

1998-09-12  Ben Elliston  <bje@cygnus.com>

	* exit2.c (func): Return a value.
	(main): Call the right thread entry function.

1998-07-22  Ben Elliston  <bje@cygnus.com>

	* exit2.c (main): Fix size of pthread_t array.

1998-07-10  Ben Elliston  <bje@cygnus.com>

	* exit2.c: New file; test pthread_exit() harder.

	* exit1.c: New file; test pthread_exit().
