Uses different pass count for different parallel queue test cases
[libcds.git] / test / stress / queue / push_pop.cpp
index b220dc0d97f61bbdb1aab6aa6ff28a5d3c98e51e..f696bc11ffeac6f565b8dd01b45ff868ba66cbb2 100644 (file)
@@ -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<size_t> s_nProducerDone( 0 );
@@ -200,8 +207,8 @@ namespace {
         {
             cds_test::thread_pool& pool = get_pool();
 
-            typedef Consumer<Queue> Consumer;
-            typedef Producer<Queue> Producer;
+            typedef Consumer<Queue> consumer_type;
+            typedef Producer<Queue> 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<Consumer&>( thr );
+                    consumer_type& consumer = static_cast<consumer_type&>( 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<Producer&>( thr );
+                    producer_type& producer = static_cast<producer_type&>( 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,17 +476,29 @@ namespace {
         }
     };
 
+#undef CDSSTRESS_Queue_F
 #define CDSSTRESS_Queue_F( test_fixture, type_name ) \
     TEST_P( test_fixture, type_name ) \
     { \
         typedef typename queue::Types<value_type>::type_name queue_type; \
+        s_nQueueSize = s_nSegmentedQueueSize; \
         test< queue_type >(); \
     }
 
     CDSSTRESS_SegmentedQueue( segmented_queue_push_pop )
 
+#ifdef CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG
+    static std::string get_test_parameter_name( testing::TestParamInfo<size_t> const& p )
+    {
+        return std::to_string( p.param );
+    }
+    INSTANTIATE_TEST_CASE_P( SQ,
+        segmented_queue_push_pop,
+        ::testing::ValuesIn( segmented_queue_push_pop::get_test_parameters()), get_test_parameter_name );
+#else
     INSTANTIATE_TEST_CASE_P( SQ,
         segmented_queue_push_pop,
         ::testing::ValuesIn( segmented_queue_push_pop::get_test_parameters()));
+#endif
 
 } // namespace