3 #include "Semaphore.hxx"
5 #include <cppunit/extensions/HelperMacros.h>
6 #include <cppunit/ui/text/TestRunner.h>
10 using namespace YACS::BASES;
12 class ThreadMechanismTest : public CppUnit::TestFixture
14 CPPUNIT_TEST_SUITE( ThreadMechanismTest );
15 CPPUNIT_TEST( test1 );
16 CPPUNIT_TEST( test2 );
17 CPPUNIT_TEST_SUITE_END();
24 static void *th1_1(void *);
25 static void *th1_2(void *);
26 static void *th1_3(void *);
27 static void *th2_1(void *);
30 static std::ostringstream _glob;
35 static const int THREAD_NUM;
36 static const int LOOPS;
40 Mutex ThreadMechanismTest::_m;
42 Semaphore ThreadMechanismTest::_s1;
44 Semaphore ThreadMechanismTest::_s2;
46 std::ostringstream ThreadMechanismTest::_glob;
48 int ThreadMechanismTest::_var=7;
50 const int ThreadMechanismTest::THREAD_NUM=5;
52 const int ThreadMechanismTest::LOOPS=4;
54 int ThreadMechanismTest::_value=0;
56 void ThreadMechanismTest::setUp()
60 void ThreadMechanismTest::tearDown()
64 void ThreadMechanismTest::test1()
66 char t1Name='A'; char t2Name='B'; char t3Name='C';
67 Thread t1(th1_1,&t1Name);
68 Thread t2(th1_2,&t2Name);
69 Thread t3(th1_3,&t3Name);
73 CPPUNIT_ASSERT( _glob.str() == "C7A8B10" );
76 void ThreadMechanismTest::test2()
79 Thread **ths=new Thread *[THREAD_NUM];
80 for (i=0; i<THREAD_NUM; ++i)
81 ths[i]=new Thread(th2_1,0);
83 for (i=0; i<THREAD_NUM; ++i)
89 CPPUNIT_ASSERT( _value == THREAD_NUM*LOOPS );
92 void *ThreadMechanismTest::th1_1(void *st)
94 char myName=*((char *) st);
96 _glob<< myName << _var;
102 void *ThreadMechanismTest::th1_2(void *st)
104 char myName=*((char *) st);
106 _glob<< myName << _var;
110 void *ThreadMechanismTest::th1_3(void *st)
112 char myName=*((char *) st);
113 _glob<< myName << _var++;
117 void *ThreadMechanismTest::th2_1(void *)
121 for (i=0; i<LOOPS; ++i)
129 Thread::sleep(100000);
135 CppUnit::TextUi::TestRunner runner;
136 runner.addTest( ThreadMechanismTest::suite() );