summaryrefslogtreecommitdiffstats
path: root/src/usr/testcore/lib/synctest.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/testcore/lib/synctest.H')
-rw-r--r--src/usr/testcore/lib/synctest.H93
1 files changed, 93 insertions, 0 deletions
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 <cxxtest/TestSuite.H>
+#include <sys/sync.h>
+#include <sys/task.h>
+
+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
+
OpenPOWER on IntegriCloud