X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=blobdiff_plain;f=test%2Fstress%2Fqueue%2Fpush_pop.cpp;h=f696bc11ffeac6f565b8dd01b45ff868ba66cbb2;hp=14b027652054931e3b7a0aadb45964f045103b7b;hb=HEAD;hpb=83904aeb6442d3f60c99dd627ac704feeb1b5a82 diff --git a/test/stress/queue/push_pop.cpp b/test/stress/queue/push_pop.cpp index 14b02765..f696bc11 100644 --- a/test/stress/queue/push_pop.cpp +++ b/test/stress/queue/push_pop.cpp @@ -40,6 +40,13 @@ namespace { static size_t s_nConsumerThreadCount = 4; static size_t s_nProducerThreadCount = 4; static size_t s_nQueueSize = 4000000; + static size_t s_nMSQueueSize = 4000000; + static size_t s_nMoirQueueSize = 4000000; + static size_t s_nBasketQueueSize = 4000000; + static size_t s_nOptimisticQueueSize = 4000000; + static size_t s_nRWQueueSize = 4000000; + static size_t s_nSegmentedQueueSize = 400000; + static size_t s_nVyukovQueueSize = 40000; static size_t s_nHeavyValueSize = 100; static std::atomic s_nProducerDone( 0 ); @@ -200,8 +207,8 @@ namespace { { cds_test::thread_pool& pool = get_pool(); - typedef Consumer Consumer; - typedef Producer Producer; + typedef Consumer consumer_type; + typedef Producer producer_type; size_t nPostTestPops = 0; { @@ -215,12 +222,12 @@ namespace { size_t nPoppedItems = 0; size_t nPushFailed = 0; - std::vector< Consumer * > arrConsumer; + std::vector< consumer_type * > arrConsumer; for ( size_t i = 0; i < pool.size(); ++i ) { cds_test::thread& thr = pool.get(i); if ( thr.type() == consumer_thread ) { - Consumer& consumer = static_cast( thr ); + consumer_type& consumer = static_cast( thr ); nTotalPops += consumer.m_nPopped; nPopFalse += consumer.m_nPopEmpty; arrConsumer.push_back( &consumer ); @@ -235,7 +242,7 @@ namespace { else { assert( thr.type() == producer_thread ); - Producer& producer = static_cast( thr ); + producer_type& producer = static_cast( thr ); nPushFailed += producer.m_nPushFailed; EXPECT_EQ( producer.m_nPushFailed, 0u ) << "producer_thread_no " << i; } @@ -325,6 +332,15 @@ namespace { s_nConsumerThreadCount = cfg.get_size_t( "ConsumerCount", s_nConsumerThreadCount ); s_nProducerThreadCount = cfg.get_size_t( "ProducerCount", s_nProducerThreadCount ); s_nQueueSize = cfg.get_size_t( "QueueSize", s_nQueueSize ); + + s_nMSQueueSize = cfg.get_size_t( "MSQueueSize", s_nMSQueueSize ); + s_nMoirQueueSize = cfg.get_size_t( "MoirQueueSize", s_nMoirQueueSize ); + s_nBasketQueueSize = cfg.get_size_t( "BasketQueueSize", s_nBasketQueueSize ); + s_nOptimisticQueueSize = cfg.get_size_t( "OptimisticQueueSize", s_nOptimisticQueueSize ); + s_nRWQueueSize = cfg.get_size_t( "RWQueueSize", s_nRWQueueSize ); + + s_nVyukovQueueSize = cfg.get_size_t( "VyukovQueueSize", s_nVyukovQueueSize ); + s_nSegmentedQueueSize = cfg.get_size_t( "SegmentedQueueSize", s_nSegmentedQueueSize ); s_nHeavyValueSize = cfg.get_size_t( "HeavyValueSize", s_nHeavyValueSize ); if ( s_nConsumerThreadCount == 0u ) @@ -345,29 +361,75 @@ namespace { using fc_with_heavy_value = queue_push_pop< fc_test::heavy_value<36000> >; using simple_queue_push_pop = queue_push_pop<>; +#undef CDSSTRESS_Queue_F +#define CDSSTRESS_Queue_F( test_fixture, type_name ) \ + TEST_F( test_fixture, type_name ) \ + { \ + typedef queue::Types< value_type >::type_name queue_type; \ + queue_type queue; \ + s_nQueueSize = s_nMSQueueSize; \ + test( queue ); \ + } + CDSSTRESS_MSQueue( simple_queue_push_pop ) + +#undef CDSSTRESS_Queue_F +#define CDSSTRESS_Queue_F( test_fixture, type_name ) \ + TEST_F( test_fixture, type_name ) \ + { \ + typedef queue::Types< value_type >::type_name queue_type; \ + queue_type queue; \ + s_nQueueSize = s_nMoirQueueSize; \ + test( queue ); \ + } CDSSTRESS_MoirQueue( simple_queue_push_pop ) + +#undef CDSSTRESS_Queue_F +#define CDSSTRESS_Queue_F( test_fixture, type_name ) \ + TEST_F( test_fixture, type_name ) \ + { \ + typedef queue::Types< value_type >::type_name queue_type; \ + queue_type queue; \ + s_nQueueSize = s_nBasketQueueSize; \ + test( queue ); \ + } CDSSTRESS_BasketQueue( simple_queue_push_pop ) - CDSSTRESS_OptimsticQueue( simple_queue_push_pop ) - CDSSTRESS_FCQueue( simple_queue_push_pop ) - CDSSTRESS_FCDeque( simple_queue_push_pop ) - CDSSTRESS_FCDeque_HeavyValue( fc_with_heavy_value ) - CDSSTRESS_RWQueue( simple_queue_push_pop ) - CDSSTRESS_StdQueue( simple_queue_push_pop ) #undef CDSSTRESS_Queue_F #define CDSSTRESS_Queue_F( test_fixture, type_name ) \ TEST_F( test_fixture, type_name ) \ { \ typedef queue::Types< value_type >::type_name queue_type; \ - queue_type queue( s_nQueueSize ); \ + queue_type queue; \ + s_nQueueSize = s_nOptimisticQueueSize; \ test( queue ); \ } + CDSSTRESS_OptimsticQueue( simple_queue_push_pop ) - CDSSTRESS_VyukovQueue( simple_queue_push_pop ) +#undef CDSSTRESS_Queue_F +#define CDSSTRESS_Queue_F( test_fixture, type_name ) \ + TEST_F( test_fixture, type_name ) \ + { \ + typedef queue::Types< value_type >::type_name queue_type; \ + queue_type queue; \ + s_nQueueSize = s_nRWQueueSize; \ + test( queue ); \ + } + CDSSTRESS_RWQueue( simple_queue_push_pop ) #undef CDSSTRESS_Queue_F +#define CDSSTRESS_Queue_F( test_fixture, type_name ) \ + TEST_F( test_fixture, type_name ) \ + { \ + size_t old_queue_size = s_nQueueSize; \ + s_nQueueSize = s_nVyukovQueueSize; \ + typedef queue::Types< value_type >::type_name queue_type; \ + queue_type queue( s_nQueueSize ); \ + test( queue ); \ + s_nQueueSize = old_queue_size; \ + } + //CDSSTRESS_VyukovQueue( simple_queue_push_pop ) // ******************************************************************** // SegmentedQueue test @@ -414,10 +476,12 @@ namespace { } }; +#undef CDSSTRESS_Queue_F #define CDSSTRESS_Queue_F( test_fixture, type_name ) \ TEST_P( test_fixture, type_name ) \ { \ typedef typename queue::Types::type_name queue_type; \ + s_nQueueSize = s_nSegmentedQueueSize; \ test< queue_type >(); \ } @@ -434,7 +498,7 @@ namespace { #else INSTANTIATE_TEST_CASE_P( SQ, segmented_queue_push_pop, - ::testing::ValuesIn( segmented_queue_push_pop::get_test_parameters()) ); + ::testing::ValuesIn( segmented_queue_push_pop::get_test_parameters())); #endif } // namespace