Uses different pass count for different parallel queue test cases
[libcds.git] / test / stress / queue / queue_type.h
index 0ccc1a7a7c2eca95c8f9b4eb699ec89affbc1218..980f9f9d06ba888a3e9666ca4340d13bcb6a89ca 100644 (file)
@@ -1,7 +1,7 @@
 /*
     This file is a part of libcds - Concurrent Data Structures library
 
-    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+    (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
 
     Source code repo: http://github.com/khizmax/libcds/
     Download: http://sourceforge.net/projects/libcds/files/
 #include <cds/container/fcqueue.h>
 #include <cds/container/fcdeque.h>
 #include <cds/container/segmented_queue.h>
+#include <cds/container/weak_ringbuffer.h>
 
 #include <cds/gc/hp.h>
 #include <cds/gc/dhp.h>
 
 #include "std_queue.h"
 #include "lock/win32_lock.h"
-#include "framework/michael_alloc.h"
 
 #include <boost/container/deque.hpp>
 
@@ -188,15 +188,6 @@ namespace fc_details{
         typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
         typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
 
-        struct traits_MSQueue_michaelAlloc : public cds::container::msqueue::traits
-        {
-            typedef memory::MichaelAllocator<int>  allocator;
-        };
-        typedef cds::container::MSQueue<cds::gc::HP,  Value, traits_MSQueue_michaelAlloc > MSQueue_HP_michaelAlloc;
-        typedef cds::container::MSQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MSQueue_DHP_michaelAlloc;
-        typedef cds::container::MoirQueue<cds::gc::HP, Value, traits_MSQueue_michaelAlloc > MoirQueue_HP_michaelAlloc;
-        typedef cds::container::MoirQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MoirQueue_DHP_michaelAlloc;
-
         struct traits_MSQueue_seqcst : public
             cds::container::msqueue::make_traits <
                 cds::opt::memory_model < cds::opt::v::sequential_consistent >
@@ -234,13 +225,6 @@ namespace fc_details{
         typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
 
-        struct traits_OptimisticQueue_michaelAlloc : public cds::container::optimistic_queue::traits
-        {
-            typedef memory::MichaelAllocator<int> allocator;
-        };
-        typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_HP_michaelAlloc;
-        typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_DHP_michaelAlloc;
-
         struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
         {
             typedef cds::opt::v::sequential_consistent memory_model;
@@ -287,19 +271,19 @@ namespace fc_details{
             }
         };
 
-        struct traits_VyukovMPMCCycleQueue_dyn_michaelAlloc : public cds::container::vyukov_queue::traits
+        struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
         {
-            typedef cds::opt::v::uninitialized_dynamic_buffer< int, memory::MichaelAllocator<int> > buffer;
+            typedef cds::atomicity::item_counter item_counter;
         };
-        class VyukovMPMCCycleQueue_dyn_michaelAlloc
-            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc >
+        class VyukovMPMCCycleQueue_dyn_ic
+            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
         {
-            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > base_class;
+            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
         public:
-            VyukovMPMCCycleQueue_dyn_michaelAlloc()
+            VyukovMPMCCycleQueue_dyn_ic()
                 : base_class( 1024 * 64 )
             {}
-            VyukovMPMCCycleQueue_dyn_michaelAlloc( size_t nCapacity )
+            VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
                 : base_class( nCapacity )
             {}
 
@@ -309,19 +293,20 @@ namespace fc_details{
             }
         };
 
-        struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
+        // singlre-consumer version
+        struct traits_VyukovMPSCCycleQueue_dyn: public traits_VyukovMPMCCycleQueue_dyn
         {
-            typedef cds::atomicity::item_counter item_counter;
+            static const bool single_consumer = true;
         };
-        class VyukovMPMCCycleQueue_dyn_ic
-            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
+        class VyukovMPSCCycleQueue_dyn
+            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPSCCycleQueue_dyn >
         {
-            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
+            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPSCCycleQueue_dyn > base_class;
         public:
-            VyukovMPMCCycleQueue_dyn_ic()
+            VyukovMPSCCycleQueue_dyn()
                 : base_class( 1024 * 64 )
             {}
-            VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
+            VyukovMPSCCycleQueue_dyn( size_t nCapacity )
                 : base_class( nCapacity )
             {}
 
@@ -331,18 +316,74 @@ namespace fc_details{
             }
         };
 
+        struct traits_VyukovMPSCCycleQueue_dyn_ic: public traits_VyukovMPMCCycleQueue_dyn
+        {
+            static const bool single_consumer = true;
+        };
+        class VyukovMPSCCycleQueue_dyn_ic
+            : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPSCCycleQueue_dyn_ic >
+        {
+            typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPSCCycleQueue_dyn_ic > base_class;
+        public:
+            VyukovMPSCCycleQueue_dyn_ic()
+                : base_class( 1024 * 64 )
+            {}
+            VyukovMPSCCycleQueue_dyn_ic( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
 
-        // BasketQueue
 
-        typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
+        // WeakRingBuffer
+        struct traits_WeakRingBuffer_dyn: public cds::container::weak_ringbuffer::traits
+        {
+            typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
+        };
+        class WeakRingBuffer_dyn
+            : public cds::container::WeakRingBuffer< Value, traits_WeakRingBuffer_dyn >
+        {
+            typedef cds::container::WeakRingBuffer< Value, traits_WeakRingBuffer_dyn > base_class;
+        public:
+            WeakRingBuffer_dyn()
+                : base_class( 1024 * 64 )
+            {}
+            WeakRingBuffer_dyn( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
 
-        struct traits_BasketQueue_michaelAlloc : public cds::container::basket_queue::traits
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
+        };
+
+        class WeakRingBuffer_void_dyn
+            : public cds::container::WeakRingBuffer< void, traits_WeakRingBuffer_dyn >
         {
-            typedef memory::MichaelAllocator<int> allocator;
+            typedef cds::container::WeakRingBuffer< void, traits_WeakRingBuffer_dyn > base_class;
+        public:
+            WeakRingBuffer_void_dyn()
+                : base_class( 1024 * 64 )
+            {}
+            WeakRingBuffer_void_dyn( size_t nCapacity )
+                : base_class( nCapacity )
+            {}
+
+            cds::opt::none statistics() const
+            {
+                return cds::opt::none();
+            }
         };
-        typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_michaelAlloc > BasketQueue_HP_michaelAlloc;
-        typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_DHP_michaelAlloc;
+
+        // BasketQueue
+
+        typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
+        typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
 
         struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
         {
@@ -545,39 +586,39 @@ namespace fc_details{
 
     template <typename Value>
     struct TypesFCHeavyValue {
-       typedef details::FCDequeL< Value > FCDequeL_HeavyValue_default;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_HeavyValue_mutex;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_HeavyValue_stat;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_HeavyValue_wait_ss;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_HeavyValue_wait_ss_stat;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_HeavyValue_wait_sm;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_HeavyValue_wait_sm_stat;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_HeavyValue_wait_mm;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_HeavyValue_wait_mm_stat;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_HeavyValue_elimination;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_HeavyValue_elimination_stat;
-
-               typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_HeavyValue_boost;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_stat;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination;
-               typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination_stat;
-
-               typedef details::FCDequeR< Value > FCDequeR_HeavyValue_default;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_HeavyValue_mutex;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_HeavyValue_stat;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_HeavyValue_wait_ss;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_HeavyValue_wait_ss_stat;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_HeavyValue_wait_sm;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_HeavyValue_wait_sm_stat;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_HeavyValue_wait_mm;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_HeavyValue_wait_mm_stat;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_HeavyValue_elimination;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_HeavyValue_elimination_stat;
-
-               typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_HeavyValue_boost;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_stat;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination;
-               typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination_stat;
+        typedef details::FCDequeL< Value > FCDequeL_HeavyValue_default;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_HeavyValue_mutex;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_HeavyValue_stat;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_HeavyValue_wait_ss;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_HeavyValue_wait_ss_stat;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_HeavyValue_wait_sm;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_HeavyValue_wait_sm_stat;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_HeavyValue_wait_mm;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_HeavyValue_wait_mm_stat;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_HeavyValue_elimination;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_HeavyValue_elimination_stat;
+
+        typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_HeavyValue_boost;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_stat;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination;
+        typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination_stat;
+
+        typedef details::FCDequeR< Value > FCDequeR_HeavyValue_default;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_HeavyValue_mutex;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_HeavyValue_stat;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_HeavyValue_wait_ss;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_HeavyValue_wait_ss_stat;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_HeavyValue_wait_sm;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_HeavyValue_wait_sm_stat;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_HeavyValue_wait_mm;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_HeavyValue_wait_mm_stat;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_HeavyValue_elimination;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_HeavyValue_elimination_stat;
+
+        typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_HeavyValue_boost;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_stat;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination;
+        typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination_stat;
     };
 }
 
@@ -625,187 +666,162 @@ namespace cds_test {
 
 } // namespace cds_test
 
-#define CDSSTRESS_Queue_F( test_fixture, type_name, level ) \
+#define CDSSTRESS_Queue_F( test_fixture, type_name ) \
     TEST_F( test_fixture, type_name ) \
     { \
-        if ( !check_detail_level( level )) return; \
         typedef queue::Types< value_type >::type_name queue_type; \
         queue_type queue; \
         test( queue ); \
     }
 
-#define CDSSTRESS_FCQueue_F( test_fixture, type_name, level ) \
+#define CDSSTRESS_FCQueue_F( test_fixture, type_name ) \
     TEST_F( test_fixture, type_name ) \
     { \
-        if ( !check_detail_level( level )) return; \
         typedef queue::TypesFCHeavyValue< value_type >::type_name queue_type; \
         queue_type queue; \
         test( queue ); \
     }
 
+#if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 0
+#   define CDSSTRESS_MSQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic      ) \
+        CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic     ) \
+
+#   define CDSSTRESS_MoirQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic        ) \
+        CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic       ) \
+
+#   define CDSSTRESS_OptimsticQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic      ) \
+        CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic     ) \
+
+#   define CDSSTRESS_BasketQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic      ) \
+        CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic     ) \
+
+#   define CDSSTRESS_FCQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss      ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm      ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm      ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination  ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss       ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm       ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm       ) \
+        CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination   ) \
+
+#   define CDSSTRESS_FCDeque_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss           )\
+        CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm           ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm           ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination       ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost             ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss           ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm           ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm           ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination       ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost             ) \
+        CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination ) \
+
+#   define CDSSTRESS_FCDeque_HeavyValue_1( test_fixture ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination      ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost            ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_default          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm          ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination      ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost            ) \
+        CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination) \
+
+#   define CDSSTRESS_RWQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic ) \
+
+#   define CDSSTRESS_SegmentedQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding    ) \
+
+#   define CDSSTRESS_StdQueue_1( test_fixture ) \
+        CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex   ) \
+        CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex    ) \
+
+#else
+#   define CDSSTRESS_MSQueue_1( test_fixture )
+#   define CDSSTRESS_MoirQueue_1( test_fixture )
+#   define CDSSTRESS_OptimsticQueue_1( test_fixture )
+#   define CDSSTRESS_BasketQueue_1( test_fixture )
+#   define CDSSTRESS_FCQueue_1( test_fixture )
+#   define CDSSTRESS_FCDeque_1( test_fixture )
+#   define CDSSTRESS_FCDeque_HeavyValue_1( test_fixture )
+#   define CDSSTRESS_RWQueue_1( test_fixture )
+#   define CDSSTRESS_SegmentedQueue_1( test_fixture )
+#   define CDSSTRESS_StdQueue_1( test_fixture )
+#endif
+
 #define CDSSTRESS_MSQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP,                0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_michaelAlloc,   0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst,         2 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic,             1 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP,               0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_michaelAlloc,  0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst,        2 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic,            1 ) \
-    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat,          0 )
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_HP         ) \
+    CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP        ) \
+    CDSSTRESS_MSQueue_1( test_fixture )
 
 #define CDSSTRESS_MoirQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP,              0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_michaelAlloc, 0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst,       2 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic,           1 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP,             0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_michaelAlloc,0 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst,      2 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic,          1 ) \
-    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat,        0 )
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP       ) \
+    CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP      ) \
+    CDSSTRESS_MoirQueue_1( test_fixture )
 
 #define CDSSTRESS_OptimsticQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP,                0 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_michaelAlloc,   0 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst,         2 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic,             1 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP,               0 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_michaelAlloc,  0 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst,        2 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic,            1 ) \
-    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat,          0 )
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP         ) \
+    CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP        ) \
+    CDSSTRESS_OptimsticQueue_1( test_fixture )
 
 #define CDSSTRESS_BasketQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP,                0 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_michaelAlloc,   0 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst,         2 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic,             1 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP,               0 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_michaelAlloc,  0 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst,        2 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic,            1 ) \
-    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat,          0 )
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP         ) \
+    CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP        ) \
+    CDSSTRESS_BasketQueue_1( test_fixture )
 
 #define CDSSTRESS_FCQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque,                 0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_stat,            0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss,         1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss_stat,    0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm,         1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm_stat,    0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm,         1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm_stat,    0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination,     1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat,0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list,                  0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_stat,             0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss,          1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss_stat,     0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm,          1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm_stat,     0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm,          1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm_stat,     0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination,      1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat, 0 )
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_deque              ) \
+    CDSSTRESS_Queue_F( test_fixture, FCQueue_list               ) \
+    CDSSTRESS_FCQueue_1( test_fixture )
+
 
 #define CDSSTRESS_FCDeque( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_default,              0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex,                0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat,                 0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss,              1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm,              1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm,              1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination,          1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat,     0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost,                1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_stat,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination,    1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination_stat, 1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_default,              0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex,                0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat,                 0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss,              1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm,              1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm,              1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm_stat,         0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination,          1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat,     0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost,                1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_stat,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination,    1 ) \
-    CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat, 1 )
+    CDSSTRESS_Queue_F( test_fixture, FCDequeL_default           ) \
+    CDSSTRESS_Queue_F( test_fixture, FCDequeR_default           ) \
+    CDSSTRESS_FCDeque_1( test_fixture )
 
 #define CDSSTRESS_FCDeque_HeavyValue( test_fixture ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_mutex,                1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_stat,                 1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss_stat,         1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm_stat,         1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm_stat,         1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination,          1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination_stat,     1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost,                1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_stat,           1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination,    1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination_stat, 1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_default,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_mutex,                1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_stat,                 1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss_stat,         1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm_stat,         1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm,              1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm_stat,         1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination,          1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination_stat,     1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost,                1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_stat,           1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination,    1 ) \
-    CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination_stat, 1 )
+    CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default  ) \
+    CDSSTRESS_FCDeque_HeavyValue_1( test_fixture )
 
 #define CDSSTRESS_RWQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin,      0 ) \
-    CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic,   1 ) \
-    CDSSTRESS_Queue_F( test_fixture, RWQueue_mutex,     0 )
+    CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin   ) \
+    CDSSTRESS_RWQueue_1( test_fixture )
 
 #define CDSSTRESS_SegmentedQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin,            0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_padding,    0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_stat,       0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_padding,   1 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_stat,      0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin,           0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding,   1 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_stat,      0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex,          0 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_padding,  1 ) \
-    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_stat,     0 )
-
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin         ) \
+    CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin        ) \
+    CDSSTRESS_SegmentedQueue_1( test_fixture )
 
 #define CDSSTRESS_VyukovQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn,              0 ) \
-    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_michaelAlloc, 0 ) \
-    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic,           1 )
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn       ) \
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic    )
+
+#define CDSSTRESS_VyukovSingleConsumerQueue( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPSCCycleQueue_dyn       ) \
+    CDSSTRESS_Queue_F( test_fixture, VyukovMPSCCycleQueue_dyn_ic    )
+
+#define CDSSTRESS_WeakRingBuffer( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, WeakRingBuffer_dyn       )
+
+#define CDSSTRESS_WeakRingBuffer_void( test_fixture ) \
+    CDSSTRESS_Queue_F( test_fixture, WeakRingBuffer_void_dyn       )
 
 #define CDSSTRESS_StdQueue( test_fixture ) \
-    CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock,   0 ) \
-    CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock,    0 ) \
-    CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex,      1 ) \
-    CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex,       1 )
+    CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock ) \
+    CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock  ) \
+    CDSSTRESS_StdQueue_1( test_fixture ) \
 
 #endif // #ifndef CDSSTRESS_QUEUE_TYPES_H