#include <vector>
#include <algorithm>
+#include <type_traits>
// Multi-threaded queue push/pop test
namespace {
static size_t s_nConsumerThreadCount = 4;
static size_t s_nProducerThreadCount = 4;
static size_t s_nQueueSize = 4000000;
+ static size_t s_nHeavyValueSize = 100;
static std::atomic<size_t> s_nProducerDone( 0 );
+ struct old_value
+ {
+ size_t nNo;
+ size_t nWriterNo;
+ };
+
+ template<class Value = old_value>
class queue_push_pop: public cds_test::stress_fixture
{
protected:
- struct value_type
- {
- size_t nNo;
- size_t nWriterNo;
- };
+ using value_type = Value;
enum {
producer_thread,
propout() << q.statistics();
}
+ private:
+ static void set_array_size( size_t size ) {
+ const bool tmp = fc_test::has_set_array_size<value_type>::value;
+ set_array_size(size, std::integral_constant<bool, tmp>());
+ }
+
+ static void set_array_size(size_t size, std::true_type){
+ value_type::set_array_size(size);
+ }
+
+ static void set_array_size(size_t, std::false_type)
+ {
+ }
+
public:
static void SetUpTestCase()
{
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_nHeavyValueSize = cfg.get_size_t( "HeavyValueSize", s_nHeavyValueSize );
if ( s_nConsumerThreadCount == 0u )
s_nConsumerThreadCount = 1;
s_nProducerThreadCount = 1;
if ( s_nQueueSize == 0u )
s_nQueueSize = 1000;
+ if ( s_nHeavyValueSize == 0 )
+ s_nHeavyValueSize = 1;
+
+ set_array_size( s_nHeavyValueSize );
}
//static void TearDownTestCase();
};
- CDSSTRESS_MSQueue( queue_push_pop )
- CDSSTRESS_MoirQueue( queue_push_pop )
- CDSSTRESS_BasketQueue( queue_push_pop )
- CDSSTRESS_OptimsticQueue( queue_push_pop )
- CDSSTRESS_FCQueue( queue_push_pop )
- CDSSTRESS_FCDeque( queue_push_pop )
- CDSSTRESS_RWQueue( queue_push_pop )
- CDSSTRESS_StdQueue( queue_push_pop )
+ using fc_with_heavy_value = queue_push_pop< fc_test::heavy_value<36000> >;
+ using simple_queue_push_pop = queue_push_pop<>;
+
+ CDSSTRESS_MSQueue( simple_queue_push_pop )
+ CDSSTRESS_MoirQueue( simple_queue_push_pop )
+ 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, level ) \
test( queue ); \
}
- CDSSTRESS_VyukovQueue( queue_push_pop )
+ CDSSTRESS_VyukovQueue( simple_queue_push_pop )
#undef CDSSTRESS_Queue_F
// SegmentedQueue test
class segmented_queue_push_pop
- : public queue_push_pop
+ : public queue_push_pop<>
, public ::testing::WithParamInterface< size_t >
{
- typedef queue_push_pop base_class;
+ typedef queue_push_pop<> base_class;
protected:
if ( bIterative && quasi_factor > 4 ) {
for ( size_t qf = 4; qf <= quasi_factor; qf *= 2 )
args.push_back( qf );
- }
- else {
+ } else {
if ( quasi_factor > 2 )
args.push_back( quasi_factor );
else
#include <cds_test/stress_test.h>
#include <cds_test/stat_flat_combining_out.h>
+#include <cds_test/fc_hevy_value.h>
+
#include "print_stat.h"
namespace queue {
} // namespace details
+namespace fc_details{
+// FCDeque
+ struct traits_FCDeque_stat:
+ public cds::container::fcdeque::make_traits<
+ cds::opt::stat< cds::container::fcdeque::stat<> >
+ >::type
+ {};
+ struct traits_FCDeque_elimination:
+ public cds::container::fcdeque::make_traits<
+ cds::opt::enable_elimination< true >
+ >::type
+ {};
+ struct traits_FCDeque_elimination_stat:
+ public cds::container::fcdeque::make_traits<
+ cds::opt::stat< cds::container::fcdeque::stat<> >,
+ cds::opt::enable_elimination< true >
+ >::type
+ {};
+ struct traits_FCDeque_mutex:
+ public cds::container::fcdeque::make_traits<
+ cds::opt::lock_type< std::mutex >
+ >::type
+ {};
+
+ struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
+ {
+ typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
+ };
+ struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
+ {
+ typedef cds::container::fcdeque::stat<> stat;
+ };
+ struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
+ {
+ typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
+ };
+ struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
+ {
+ typedef cds::container::fcdeque::stat<> stat;
+ };
+ struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
+ {
+ typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
+ };
+ struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
+ {
+ typedef cds::container::fcdeque::stat<> stat;
+ };
+
+}
template <typename Value>
struct Types {
typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
- // FCDeque
- struct traits_FCDeque_stat:
- public cds::container::fcdeque::make_traits<
- cds::opt::stat< cds::container::fcdeque::stat<> >
- >::type
- {};
- struct traits_FCDeque_elimination:
- public cds::container::fcdeque::make_traits<
- cds::opt::enable_elimination< true >
- >::type
- {};
- struct traits_FCDeque_elimination_stat:
- public cds::container::fcdeque::make_traits<
- cds::opt::stat< cds::container::fcdeque::stat<> >,
- cds::opt::enable_elimination< true >
- >::type
- {};
- struct traits_FCDeque_mutex:
- public cds::container::fcdeque::make_traits<
- cds::opt::lock_type< std::mutex >
- >::type
- {};
-
- struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
- {
- typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
- };
- struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
- {
- typedef cds::container::fcdeque::stat<> stat;
- };
- struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
- {
- typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
- };
- struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
- {
- typedef cds::container::fcdeque::stat<> stat;
- };
- struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
- {
- typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
- };
- struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
- {
- typedef cds::container::fcdeque::stat<> stat;
- };
typedef details::FCDequeL< Value > FCDequeL_default;
- typedef details::FCDequeL< Value, traits_FCDeque_mutex > FCDequeL_mutex;
- typedef details::FCDequeL< Value, traits_FCDeque_stat > FCDequeL_stat;
- typedef details::FCDequeL< Value, traits_FCDeque_wait_ss > FCDequeL_wait_ss;
- typedef details::FCDequeL< Value, traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
- typedef details::FCDequeL< Value, traits_FCDeque_wait_sm > FCDequeL_wait_sm;
- typedef details::FCDequeL< Value, traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
- typedef details::FCDequeL< Value, traits_FCDeque_wait_mm > FCDequeL_wait_mm;
- typedef details::FCDequeL< Value, traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
- typedef details::FCDequeL< Value, traits_FCDeque_elimination > FCDequeL_elimination;
- typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_mutex;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_wait_ss;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_wait_sm;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_wait_mm;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_elimination;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
- typedef details::FCDequeL< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
- typedef details::FCDequeL< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
- typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
+ typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
typedef details::FCDequeR< Value > FCDequeR_default;
- typedef details::FCDequeR< Value, traits_FCDeque_mutex > FCDequeR_mutex;
- typedef details::FCDequeR< Value, traits_FCDeque_stat > FCDequeR_stat;
- typedef details::FCDequeR< Value, traits_FCDeque_wait_ss > FCDequeR_wait_ss;
- typedef details::FCDequeR< Value, traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
- typedef details::FCDequeR< Value, traits_FCDeque_wait_sm > FCDequeR_wait_sm;
- typedef details::FCDequeR< Value, traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
- typedef details::FCDequeR< Value, traits_FCDeque_wait_mm > FCDequeR_wait_mm;
- typedef details::FCDequeR< Value, traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
- typedef details::FCDequeR< Value, traits_FCDeque_elimination > FCDequeR_elimination;
- typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_mutex;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_wait_ss;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_wait_sm;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_wait_mm;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_elimination;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
- typedef details::FCDequeR< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
- typedef details::FCDequeR< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
- typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
+ typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
// STL
typedef StdQueue_deque<Value> StdQueue_deque_Spinlock;
typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding > SegmentedQueue_DHP_mutex_padding;
typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat > SegmentedQueue_DHP_mutex_stat;
};
+
+ 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;
+ };
}
test( queue ); \
}
+#define CDSSTRESS_FCQueue_F( test_fixture, type_name, level ) \
+ 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 ); \
+ }
+
#define CDSSTRESS_MSQueue( test_fixture ) \
CDSSTRESS_Queue_F( test_fixture, MSQueue_HP, 0 ) \
CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst, 2 ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination, 1 ) \
CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat, 0 )
+
#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_mutex, 1 ) \
+ CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat, 1 ) \
+ 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, FCDequeR_boost_elimination, 1 ) \
CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat, 1 )
+#define CDSSTRESS_FCDeque_HeavyValue( test_fixture ) \
+ CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default, 0 ) \
+ CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_mutex, 0 ) \
+ CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_stat, 0 ) \
+ 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 )
+
#define CDSSTRESS_RWQueue( test_fixture ) \
CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin, 0 ) \
CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic, 1 ) \