summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ChangeLog12
-rw-r--r--tests/Makefile51
-rw-r--r--tests/equal1.c51
-rw-r--r--tests/exit1.c5
-rw-r--r--tests/test.h28
5 files changed, 107 insertions, 40 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 962f922..2d57206 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,15 @@
+1999-02-23 Ross Johnson <rpj@ise.canberra.edu.au>
+
+ * 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.
diff --git a/tests/Makefile b/tests/Makefile
index 82c1d44..56968e5 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -1,14 +1,55 @@
# Makefile for the pthreads test suite.
# If all of the .pass files can be created, the test suite has passed.
+
+CP = copy
+RM = erase
+TOUCH = echo Passed >
+
+#
+# Mingw32
+#
+CC = gcc
+CFLAGS = -g -O2 -UNDEBUG -Wall -o $@ $^
+BUILD_DIR = ../build
+RELEASE_DIR = ../release
+INCLUDES = -I$(BUILD_DIR)/include
+LIBS = $(BUILD_DIR)/lib/libpthread32.a
+
+##
+## MSVC
+##
+#CC = cl
+#CFLAGS = /W3 /MT /nologo /Yd /Zi /Fe$@ $^
+#BUILD_DIR = ..\build
+#RELEASE_DIR = ..\release
+#INCLUDES = -I$(BUILD_DIR)\include
+#LIBS = $(BUILD_DIR)\lib\pthread.lib
+
+DLL = pthread.dll
+
# If a test case returns a non-zero exit code to the shell, make will
# stop.
-PASSES = count1.pass create1.pass equal1.pass exit1.pass exit2.pass \
- exit3.pass eyal1.pass mutex1.pass mutex2.pass mutex3.pass \
- once1.pass self1.pass self2.pass self3.pass tsd1.pass
+TESTS = count1 create1 equal1 exit1 exit2 \
+ exit3 eyal1 mutex1 mutex2 mutex3 \
+ once1 self1 self2 self3 tsd1
+
+PASSES = $(TESTS:%=%.pass)
all: $(PASSES)
-%.pass: %.exe
- touch $@
+%.pass: %.exe $(DLL)
+ $*
+ $(TOUCH) $@
+
+%.exe: %.c
+ $(CC) $(CFLAGS) $(INCLUDES) $(LIBS)
+
+$(DLL):
+ $(CP) ..\build\bin\$@ .
+
+clean:
+ - $(RM) *.exe
+ - $(RM) *.pass
+
diff --git a/tests/equal1.c b/tests/equal1.c
index d882adc..617a956 100644
--- a/tests/equal1.c
+++ b/tests/equal1.c
@@ -4,44 +4,31 @@
* Depends on functions: pthread_create().
*/
-#include <pthread.h>
-#include <stdio.h>
-#include <windows.h>
+#include "test.h"
void * func(void * arg)
{
Sleep(2000);
return 0;
}
-
+
+int
main()
{
- int rc;
- pthread_t t1, t2;
- if (pthread_create(&t1, NULL, func, (void *) 1) != 0)
- {
- return 1;
- }
-
- if (pthread_create(&t2, NULL, func, (void *) 2) != 0)
- {
- return 1;
- }
-
- if (pthread_equal(t1, t2))
- {
- return 1;
- }
-
- if (pthread_equal(t1,t1) == 0)
- {
- return 1;
- }
-
- /* This is a hack. We don't want to rely on pthread_join
- yet if we can help it. */
- Sleep(8000);
-
- /* Success. */
- return 0;
+ pthread_t t1, t2;
+
+ assert(pthread_create(&t1, NULL, func, (void *) 1) == 0);
+
+ assert(pthread_create(&t2, NULL, func, (void *) 2) == 0);
+
+ assert(pthread_equal(t1, t2) == 0);
+
+ assert(pthread_equal(t1,t1) != 0);
+
+ /* This is a hack. We don't want to rely on pthread_join
+ yet if we can help it. */
+ Sleep(4000);
+
+ /* Success. */
+ return 0;
}
diff --git a/tests/exit1.c b/tests/exit1.c
index 2f31383..758852a 100644
--- a/tests/exit1.c
+++ b/tests/exit1.c
@@ -10,5 +10,8 @@ int
main(int argc, char * argv[])
{
/* A simple test firstly. */
- pthread_exit((void *) 2);
+ pthread_exit((void *) 0);
+
+ /* Not reached */
+ return 1;
}
diff --git a/tests/test.h b/tests/test.h
index 0beeaab..23bcd48 100644
--- a/tests/test.h
+++ b/tests/test.h
@@ -4,11 +4,12 @@
* Useful definitions and declarations for tests.
*/
-#include <pthread.h>
-
#ifndef _PTHREAD_TEST_H_
#define _PTHREAD_TEST_H_
+#include <pthread.h>
+#include <stdio.h>
+
char * error_string[] = {
"ZERO",
"EPERM",
@@ -55,4 +56,27 @@ char * error_string[] = {
"EILSEQ",
};
+/*
+ * The Mingw32 assert macro calls the CRTDLL _assert function
+ * which pops up a dialog. We want to run in batch mode so
+ * we define our own assert macro.
+ */
+#ifdef NDEBUG
+
+#define assert(e) ((void)0)
+
+#else /* NDEBUG */
+
+#ifdef assert
+# undef assert
+#endif
+
+#define assert(e) \
+ ((e) ? (void) 0 : \
+ (fprintf(stderr, "Assertion failed: (%s), file %s, line %d\n", \
+ #e, __FILE__, (int) __LINE__), exit(1)))
+
+#endif /* NDEBUG */
+
+
#endif