From 29daf4ab38bb439d979bb502d159a6ebf20130ad Mon Sep 17 00:00:00 2001 From: khizmax Date: Sun, 22 Nov 2015 21:51:29 +0300 Subject: [PATCH] Rearranged queue tests --- tests/unit/queue/bounded_queue_fulness.cpp | 112 ++++++++++----------- tests/unit/queue/queue_defs.h | 5 +- tests/unit/queue/queue_type.h | 1 + 3 files changed, 58 insertions(+), 60 deletions(-) diff --git a/tests/unit/queue/bounded_queue_fulness.cpp b/tests/unit/queue/bounded_queue_fulness.cpp index 9222aaf8..6dd17cfb 100644 --- a/tests/unit/queue/bounded_queue_fulness.cpp +++ b/tests/unit/queue/bounded_queue_fulness.cpp @@ -21,6 +21,52 @@ namespace queue { } using namespace ns_BoundedQueue_Fullness; + class VyukovMPMCCycleQueue_dyn_fair_ : public Types::VyukovMPMCCycleQueue_dyn_ic + { + typedef Types::VyukovMPMCCycleQueue_dyn_ic base_class; + public: + typedef base_class::value_type value_type; + + VyukovMPMCCycleQueue_dyn_fair_() + : base_class() + {} + + VyukovMPMCCycleQueue_dyn_fair_( size_t nCapacity ) + : base_class( nCapacity ) + {} + + bool enqueue( value_type const& data ) + { + bool ret; + do { + ret = base_class::enqueue( data ); + } while ( !ret && size() != capacity() ); + return ret; + } + + bool push( value_type const& data ) + { + return enqueue( data ); + } + + bool dequeue( value_type& dest ) + { + bool ret; + do { + ret = base_class::dequeue( dest ); + } while ( !ret && size() != capacity() ); + return ret; + } + + bool pop( value_type& dest ) + { + return dequeue( dest ); + } + + size_t size() const { return base_class::size(); } + size_t capacity() const { return base_class::capacity(); } + }; + class BoundedQueue_Fullness: public CppUnitMini::TestCase { template @@ -100,7 +146,7 @@ namespace queue { template void test() { - Queue testQueue; + Queue testQueue( s_nQueueSize ); CppUnitMini::ThreadPool pool( *this ); pool.add( new Thread( pool, testQueue ), s_nThreadCount ); @@ -109,69 +155,14 @@ namespace queue { for ( size_t i = 0; i < nSize; ++i ) testQueue.push( i ); - CPPUNIT_MSG( " Thread count=" << s_nThreadCount << " ..."); - pool.run(); - - analyze( pool, testQueue ); - - CPPUNIT_MSG( testQueue.statistics() ); - } - - template - void test_bounded() - { - size_t nStart = 0; - size_t nThreadItemCount = s_nQueueSize / s_nThreadCount; - - Queue testQueue( s_nQueueSize ); - - CppUnitMini::ThreadPool pool( *this ); - pool.add( new Thread( pool, testQueue ), s_nThreadCount ); - - for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) { - Thread * pThread = reinterpret_cast *>(*it); - pThread->m_nStartItem = nStart; - nStart += nThreadItemCount; - pThread->m_nEndItem = nStart; - } - - CPPUNIT_MSG( " Push test, thread count=" << s_nThreadCount << " ..."); + CPPUNIT_MSG( " Thread count=" << s_nThreadCount << ", push/pop pairs=" << s_nPassCount + << ", queue capacity=" << testQueue.capacity() << " ..."); pool.run(); analyze( pool, testQueue ); CPPUNIT_MSG( testQueue.statistics() ); } - - template - void test_segmented() - { - CPPUNIT_MSG( " Push test, thread count=" << s_nThreadCount << " ..."); - for ( size_t nSegmentSize = 4; nSegmentSize <= 256; nSegmentSize *= 4 ) { - CPPUNIT_MSG( "Segment size: " << nSegmentSize ); - - Queue testQueue( nSegmentSize ); - - CppUnitMini::ThreadPool pool( *this ); - pool.add( new Thread( pool, testQueue ), s_nThreadCount ); - - size_t nStart = 0; - size_t nThreadItemCount = s_nQueueSize / s_nThreadCount; - for ( CppUnitMini::ThreadPool::iterator it = pool.begin(); it != pool.end(); ++it ) { - Thread * pThread = reinterpret_cast *>(*it); - pThread->m_nStartItem = nStart; - nStart += nThreadItemCount; - pThread->m_nEndItem = nStart; - } - - pool.run(); - - analyze( pool, testQueue ); - - CPPUNIT_MSG( testQueue.statistics() ); - } - } - void setUpParams( const CppUnitMini::TestCfg& cfg ) { s_nThreadCount = cfg.getULong("ThreadCount", 8 ); s_nQueueSize = cfg.getULong("QueueSize", 1024 ); @@ -181,10 +172,15 @@ namespace queue { protected: CDSUNIT_DECLARE_TsigasCycleQueue( size_t ) CDSUNIT_DECLARE_VyukovMPMCCycleQueue( size_t ) + void VyukovMPMCCycleQueue_dyn_fair() + { + test< VyukovMPMCCycleQueue_dyn_fair_ >(); + } CPPUNIT_TEST_SUITE( BoundedQueue_Fullness ) CDSUNIT_TEST_TsigasCycleQueue CDSUNIT_TEST_VyukovMPMCCycleQueue + CPPUNIT_TEST( VyukovMPMCCycleQueue_dyn_fair_ ) \ CPPUNIT_TEST_SUITE_END(); }; diff --git a/tests/unit/queue/queue_defs.h b/tests/unit/queue/queue_defs.h index c5e560f5..02121091 100644 --- a/tests/unit/queue/queue_defs.h +++ b/tests/unit/queue/queue_defs.h @@ -193,12 +193,13 @@ #define CDSUNIT_DECLARE_VyukovMPMCCycleQueue( ITEM_TYPE ) \ TEST_BOUNDED(VyukovMPMCCycleQueue_dyn, ITEM_TYPE) \ TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_michaelAlloc, ITEM_TYPE) \ - TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_ic, ITEM_TYPE) + TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_ic, ITEM_TYPE) \ + #define CDSUNIT_TEST_VyukovMPMCCycleQueue \ CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn) \ CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_michaelAlloc) \ - CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_ic) + CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_ic) \ // SegmentedQueue #define CDSUNIT_DECLARE_SegmentedQueue( ITEM_TYPE ) \ diff --git a/tests/unit/queue/queue_type.h b/tests/unit/queue/queue_type.h index 37dae5f1..b5709b06 100644 --- a/tests/unit/queue/queue_type.h +++ b/tests/unit/queue/queue_type.h @@ -334,6 +334,7 @@ namespace queue { } }; + // BasketQueue typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP; -- 2.34.1