3 #include "cppunit/thread.h"
4 #include <cds/threading/model.h>
7 static size_t s_nThreadCount = 8;
8 static size_t s_nPassCount = 1000000;
11 class thread_init_fini: public CppUnitMini::TestCase
13 class Thread: public CppUnitMini::TestThread
15 virtual TestThread * clone()
17 return new Thread( *this );
21 Thread( CppUnitMini::ThreadPool& pool )
22 : CppUnitMini::TestThread( pool )
25 : CppUnitMini::TestThread( src )
28 thread_init_fini& getTest()
30 return reinterpret_cast<thread_init_fini&>( m_Pool.m_Test );
40 for ( size_t i = 0; i < s_nPassCount; ++i ) {
41 CPPUNIT_ASSERT(!cds::threading::Manager::isThreadAttached());
42 if ( !cds::threading::Manager::isThreadAttached() )
43 cds::threading::Manager::attachThread();
44 CPPUNIT_ASSERT( cds::threading::Manager::isThreadAttached() );
45 cds::threading::Manager::detachThread();
53 CPPUNIT_MSG( "Thread init/fini test,\n thread count=" << s_nThreadCount << " pass count=" << s_nPassCount << "..." );
55 CppUnitMini::ThreadPool pool( *this );
57 pool.add( new Thread( pool ), s_nThreadCount );
64 CPPUNIT_MSG( " Duration=" << timer.duration() );
67 void setUpParams( const CppUnitMini::TestCfg& cfg ) {
68 s_nThreadCount = cfg.getULong("ThreadCount", 8 );
69 s_nPassCount = cfg.getULong("PassCount", 1000000 );
72 CPPUNIT_TEST_SUITE(thread_init_fini)
73 CPPUNIT_TEST(init_fini);
74 CPPUNIT_TEST_SUITE_END();
77 CPPUNIT_TEST_SUITE_REGISTRATION(thread_init_fini);