summaryrefslogtreecommitdiff
path: root/tests/benchtest1.c
diff options
context:
space:
mode:
authorrpj <rpj>2001-07-01 13:49:38 +0000
committerrpj <rpj>2001-07-01 13:49:38 +0000
commit19299847fdd32094b28377db1aea61b0f605dc8b (patch)
tree6790f92e1c0d67063edccf82a57616f977633aef /tests/benchtest1.c
parenta311086d622d3c778e1da57cfae167c0ab1c0fb4 (diff)
2001-07-01 Ross Johnson <rpj@setup1.ise.canberra.edu.au>
Contributed by - Alexander Terekhov. * condvar.c: Fixed lost signal bug reported by Timur Aydin (taydin@snet.net). [RPJ (me) didn't translate the original algorithm correctly.] * semaphore.c: Added sem_post_multiple; this is a useful routine, but it doesn't appear to be standard. For now it's not an exported function. tests/ChangeLog: 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.
Diffstat (limited to 'tests/benchtest1.c')
-rw-r--r--tests/benchtest1.c116
1 files changed, 87 insertions, 29 deletions
diff --git a/tests/benchtest1.c b/tests/benchtest1.c
index 883c24f..8514fa4 100644
--- a/tests/benchtest1.c
+++ b/tests/benchtest1.c
@@ -14,6 +14,9 @@
#include <stdlib.h>
#endif
+#include "benchtest.h"
+
+#define PTW32_MUTEX_TYPES
#define ITERATIONS 10000000L
pthread_mutex_t mx;
@@ -40,24 +43,22 @@ long overHeadMilliSecs = 0;
void
runTest (char * testNameString, int mType)
{
-#ifdef PTHREAD_MUTEX_DEFAULT
- pthread_mutexattr_settype(&ma, mType);
+#ifdef PTW32_MUTEX_TYPES
+ assert(pthread_mutexattr_settype(&ma, mType) == 0);
#endif
- pthread_mutex_init(&mx, &ma);
+ assert(pthread_mutex_init(&mx, &ma) == 0);
TESTSTART
- (void) pthread_mutex_lock(&mx);
- (void) pthread_mutex_unlock(&mx);
+ assert(pthread_mutex_lock(&mx) == 0);
+ assert(pthread_mutex_unlock(&mx) == 0);
TESTSTOP
- pthread_mutex_destroy(&mx);
+ assert(pthread_mutex_destroy(&mx) == 0);
- durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop)
- - overHeadMilliSecs;
+ durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
- printf( "%-25s %15ld %15ld %15.3f\n",
- testNameString,
- ITERATIONS,
+ printf( "%-40s %15ld %15.3f\n",
+ testNameString,
durationMilliSecs,
(float) durationMilliSecs * 1E3 / ITERATIONS);
}
@@ -66,47 +67,104 @@ runTest (char * testNameString, int mType)
int
main (int argc, char *argv[])
{
+ CRITICAL_SECTION cs;
+ old_mutex_t ox;
+
pthread_mutexattr_init(&ma);
- printf( "Single thread, non-blocking mutex locks/unlocks.\n\n");
- printf( "%-25s %15s %15s %15s\n",
- "Test",
- "Iterations",
- "Total(msec)",
- "lock/unlock(usec)");
+ printf( "========================================================================\n");
+ printf( "\nNon-blocking mutex lock plus unlock.\n%ld iterations\n\n",
+ ITERATIONS);
+ printf( "%-40s %15s %15s\n",
+ "Test",
+ "Total(msec)",
+ "average(usec)");
+ printf( "------------------------------------------------------------------------\n");
/*
* Time the loop overhead so we can subtract it from the actual test times.
*/
TESTSTART
+ assert(1 == 1);
+ assert(1 == 1);
TESTSTOP
- durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop)
- - overHeadMilliSecs;
+ durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
+ overHeadMilliSecs = durationMilliSecs;
- printf( "%-25s %15ld %15ld\n",
- "Overhead",
- ITERATIONS,
- durationMilliSecs);
- overHeadMilliSecs = durationMilliSecs;
+ InitializeCriticalSection(&cs);
+
+ TESTSTART
+ assert((EnterCriticalSection(&cs), 1) == 1);
+ assert((LeaveCriticalSection(&cs), 1) == 1);
+ TESTSTOP
+
+ DeleteCriticalSection(&cs);
+
+ durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
+
+ printf( "%-40s %15ld %15.3f\n",
+ "Simple Critical Section",
+ durationMilliSecs,
+ (float) durationMilliSecs * 1E3 / ITERATIONS);
+
+
+ old_mutex_use = OLD_WIN32CS;
+ assert(old_mutex_init(&ox, NULL) == 0);
+
+ TESTSTART
+ assert(old_mutex_lock(&ox) == 0);
+ assert(old_mutex_unlock(&ox) == 0);
+ TESTSTOP
+
+ assert(old_mutex_destroy(&ox) == 0);
+
+ durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
+
+ printf( "%-40s %15ld %15.3f\n",
+ "PT Mutex using a Critical Section (WNT)",
+ durationMilliSecs,
+ (float) durationMilliSecs * 1E3 / ITERATIONS);
+
+
+ old_mutex_use = OLD_WIN32MUTEX;
+ assert(old_mutex_init(&ox, NULL) == 0);
+
+ TESTSTART
+ assert(old_mutex_lock(&ox) == 0);
+ assert(old_mutex_unlock(&ox) == 0);
+ TESTSTOP
+
+ assert(old_mutex_destroy(&ox) == 0);
+
+ durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs;
+
+ printf( "%-40s %15ld %15.3f\n",
+ "PT Mutex using a Win32 Mutex (W9x)",
+ durationMilliSecs,
+ (float) durationMilliSecs * 1E3 / ITERATIONS);
+
+ printf( "........................................................................\n");
/*
* Now we can start the actual tests
*/
-#ifdef PTHREAD_MUTEX_DEFAULT
- runTest("PTHREAD_MUTEX_DEFAULT", PTHREAD_MUTEX_DEFAULT);
+#ifdef PTW32_MUTEX_TYPES
+ runTest("PTHREAD_MUTEX_DEFAULT (W9x,WNT)", PTHREAD_MUTEX_DEFAULT);
- runTest("PTHREAD_MUTEX_NORMAL", PTHREAD_MUTEX_NORMAL);
+ runTest("PTHREAD_MUTEX_NORMAL (W9x,WNT)", PTHREAD_MUTEX_NORMAL);
- runTest("PTHREAD_MUTEX_ERRORCHECK", PTHREAD_MUTEX_ERRORCHECK);
+ runTest("PTHREAD_MUTEX_ERRORCHECK (W9x,WNT)", PTHREAD_MUTEX_ERRORCHECK);
- runTest("PTHREAD_MUTEX_RECURSIVE", PTHREAD_MUTEX_RECURSIVE);
+ runTest("PTHREAD_MUTEX_RECURSIVE (W9x,WNT)", PTHREAD_MUTEX_RECURSIVE);
#else
runTest("Non-blocking lock", 0);
#endif
+ printf( "========================================================================\n");
+
/*
* End of tests.
*/