From b301c77be3ab2b9c097f2e3df47e96a907221ed9 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Fri, 17 Jun 2011 13:15:52 -0500 Subject: Create testcore directory for kernel-level tests. Change-Id: I4b6235edec59c0a97f53af431752d2f4dfabcfa9 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/151 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- src/usr/testcore/lib/synctest.H | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/usr/testcore/lib/synctest.H (limited to 'src/usr/testcore/lib/synctest.H') diff --git a/src/usr/testcore/lib/synctest.H b/src/usr/testcore/lib/synctest.H new file mode 100644 index 000000000..5a53d2e0a --- /dev/null +++ b/src/usr/testcore/lib/synctest.H @@ -0,0 +1,93 @@ +#ifndef __SYNCTEST_H +#define __SYNCTEST_H +/** + * @file synctest.H + * + * @brief Test cases for the sycronization +*/ + +#include +#include +#include + +class SyncTest: public CxxTest::TestSuite +{ + public: + + + void testMutex() + { + mutex_init(&mutex); + barrier_init(&barrier, 7); + + task_create(func1, this); + task_create(func2, this); + task_create(func2, this); + task_create(func2, this); + task_create(func2, this); + task_create(func2, this); + barrier_wait(&barrier); + TS_TRACE("ALL THREADS ENDED"); + } + + void testBarrier() + { + barrier_t barrier; + barrier_init(&barrier,3); + task_create(func3,&barrier); + task_create(func4,&barrier); + barrier_wait(&barrier); + TS_TRACE("B0"); + barrier_destroy(&barrier); + } + + private: + + mutex_t mutex; + barrier_t barrier; + + static void func1(void * i_p) + { + SyncTest * my = (SyncTest *) i_p; + mutex_t * mutex = &(my->mutex); + barrier_t * barrier = &(my->barrier); + + mutex_lock(mutex); + for(int i = 0; i < 100000; ++i); + TS_TRACE("ME FIRST"); + mutex_unlock(mutex); + barrier_wait(barrier); + task_end(); + } + + static void func2(void * i_p) + { + SyncTest * my = (SyncTest *) i_p; + mutex_t * mutex = &(my->mutex); + barrier_t * barrier = &(my->barrier); + + mutex_lock(mutex); + TS_TRACE("ME NEXT"); + mutex_unlock(mutex); + barrier_wait(barrier); + task_end(); + } + + static void func3(void * i_p) + { + barrier_t * barrier = (barrier_t *) i_p; + barrier_wait(barrier); + TS_TRACE("B1"); + task_end(); + } + static void func4(void * i_p) + { + barrier_t * barrier = (barrier_t *) i_p; + barrier_wait(barrier); + TS_TRACE("B2"); + task_end(); + } + +}; +#endif + -- cgit v1.2.1