Merged branch 'master' of https://github.com/Nemo1369/libcds
[libcds.git] / test / stress / queue / queue_type.h
1 /*
2     This file is a part of libcds - Concurrent Data Structures library
3
4     (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
5
6     Source code repo: http://github.com/khizmax/libcds/
7     Download: http://sourceforge.net/projects/libcds/files/
8
9     Redistribution and use in source and binary forms, with or without
10     modification, are permitted provided that the following conditions are met:
11
12     * Redistributions of source code must retain the above copyright notice, this
13       list of conditions and the following disclaimer.
14
15     * Redistributions in binary form must reproduce the above copyright notice,
16       this list of conditions and the following disclaimer in the documentation
17       and/or other materials provided with the distribution.
18
19     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #ifndef CDSSTRESS_QUEUE_TYPES_H
32 #define CDSSTRESS_QUEUE_TYPES_H
33
34 #include <cds/container/msqueue.h>
35 #include <cds/container/moir_queue.h>
36 #include <cds/container/rwqueue.h>
37 #include <cds/container/optimistic_queue.h>
38 #include <cds/container/vyukov_mpmc_cycle_queue.h>
39 #include <cds/container/basket_queue.h>
40 #include <cds/container/fcqueue.h>
41 #include <cds/container/fcdeque.h>
42 #include <cds/container/segmented_queue.h>
43
44 #include <cds/gc/hp.h>
45 #include <cds/gc/dhp.h>
46
47 #include "std_queue.h"
48 #include "lock/win32_lock.h"
49
50 #include <boost/container/deque.hpp>
51
52 #include <cds_test/stress_test.h>
53 #include <cds_test/stat_flat_combining_out.h>
54 #include <cds_test/fc_hevy_value.h>
55
56 #include "print_stat.h"
57
58 namespace queue {
59
60     namespace details {
61         template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque=std::deque<T> >
62         class FCDequeL: public cds::container::FCDeque<T, Deque, Traits >
63         {
64             typedef cds::container::FCDeque<T, Deque, Traits > base_class;
65         public:
66             FCDequeL()
67             {}
68
69             FCDequeL(
70                 unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
71                 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
72                 )
73                 : base_class( nCompactFactor, nCombinePassCount )
74             {}
75
76             bool push( T const& v )
77             {
78                 return base_class::push_front( v );
79             }
80             bool enqueue( T const& v )
81             {
82                 return push( v );
83             }
84
85             bool pop( T& v )
86             {
87                 return base_class::pop_back( v );
88             }
89             bool deque( T& v )
90             {
91                 return pop(v);
92             }
93         };
94
95         template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque = std::deque<T> >
96         class FCDequeR: public cds::container::FCDeque<T, Deque, Traits >
97         {
98             typedef cds::container::FCDeque<T, Deque, Traits > base_class;
99         public:
100             FCDequeR()
101             {}
102
103             FCDequeR(
104                 unsigned int nCompactFactor     ///< Flat combining: publication list compacting factor
105                 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
106                 )
107                 : base_class( nCompactFactor, nCombinePassCount )
108             {}
109
110             bool push( T const& v )
111             {
112                 return base_class::push_back( v );
113             }
114             bool enqueue( T const& v )
115             {
116                 return push( v );
117             }
118
119             bool pop( T& v )
120             {
121                 return base_class::pop_front( v );
122             }
123             bool deque( T& v )
124             {
125                 return pop(v);
126             }
127         };
128
129     } // namespace details
130
131 namespace fc_details{
132 // FCDeque
133         struct traits_FCDeque_stat:
134             public cds::container::fcdeque::make_traits<
135                 cds::opt::stat< cds::container::fcdeque::stat<> >
136             >::type
137         {};
138         struct traits_FCDeque_elimination:
139             public cds::container::fcdeque::make_traits<
140                 cds::opt::enable_elimination< true >
141             >::type
142         {};
143         struct traits_FCDeque_elimination_stat:
144             public cds::container::fcdeque::make_traits<
145                 cds::opt::stat< cds::container::fcdeque::stat<> >,
146                 cds::opt::enable_elimination< true >
147             >::type
148         {};
149         struct traits_FCDeque_mutex:
150             public cds::container::fcdeque::make_traits<
151                 cds::opt::lock_type< std::mutex >
152             >::type
153         {};
154
155         struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
156         {
157             typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
158         };
159         struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
160         {
161             typedef cds::container::fcdeque::stat<> stat;
162         };
163         struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
164         {
165             typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
166         };
167         struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
168         {
169             typedef cds::container::fcdeque::stat<> stat;
170         };
171         struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
172         {
173             typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
174         };
175         struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
176         {
177             typedef cds::container::fcdeque::stat<> stat;
178         };
179
180 }
181     template <typename Value>
182     struct Types {
183
184         // MSQueue
185         typedef cds::container::MSQueue<cds::gc::HP,  Value > MSQueue_HP;
186         typedef cds::container::MSQueue<cds::gc::DHP, Value > MSQueue_DHP;
187         typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
188         typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
189
190         struct traits_MSQueue_seqcst : public
191             cds::container::msqueue::make_traits <
192                 cds::opt::memory_model < cds::opt::v::sequential_consistent >
193             > ::type
194         {};
195         typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_seqcst > MSQueue_HP_seqcst;
196         typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MSQueue_DHP_seqcst;
197         typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MoirQueue_HP_seqcst;
198         typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MoirQueue_DHP_seqcst;
199
200         // MSQueue + item counter
201         struct traits_MSQueue_ic : public
202             cds::container::msqueue::make_traits <
203                 cds::opt::item_counter < cds::atomicity::item_counter >
204             >::type
205         {};
206         typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_ic > MSQueue_HP_ic;
207         typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MSQueue_DHP_ic;
208         typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_ic > MoirQueue_HP_ic;
209         typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MoirQueue_DHP_ic;
210
211         // MSQueue + stat
212         struct traits_MSQueue_stat: public
213             cds::container::msqueue::make_traits <
214                 cds::opt::stat< cds::container::msqueue::stat<> >
215             >::type
216         {};
217         typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_stat > MSQueue_HP_stat;
218         typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MSQueue_DHP_stat;
219         typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_stat > MoirQueue_HP_stat;
220         typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MoirQueue_DHP_stat;
221
222
223         // OptimisticQueue
224         typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
225         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
226
227         struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
228         {
229             typedef cds::opt::v::sequential_consistent memory_model;
230         };
231         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_seqcst > OptimisticQueue_HP_seqcst;
232         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_DHP_seqcst;
233
234         struct traits_OptimisticQueue_ic : public cds::container::optimistic_queue::traits
235         {
236             typedef cds::atomicity::item_counter item_counter;
237         };
238         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_ic > OptimisticQueue_HP_ic;
239         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_ic > OptimisticQueue_DHP_ic;
240
241         struct traits_OptimisticQueue_stat : public
242             cds::container::optimistic_queue::make_traits <
243                 cds::opt::stat < cds::intrusive::optimistic_queue::stat<> >
244             > ::type
245         {};
246         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_stat > OptimisticQueue_HP_stat;
247         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_stat > OptimisticQueue_DHP_stat;
248
249
250         // VyukovMPMCCycleQueue
251         struct traits_VyukovMPMCCycleQueue_dyn : public cds::container::vyukov_queue::traits
252         {
253             typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
254         };
255         class VyukovMPMCCycleQueue_dyn
256             : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn >
257         {
258             typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn > base_class;
259         public:
260             VyukovMPMCCycleQueue_dyn()
261                 : base_class( 1024 * 64 )
262             {}
263             VyukovMPMCCycleQueue_dyn( size_t nCapacity )
264                 : base_class( nCapacity )
265             {}
266
267             cds::opt::none statistics() const
268             {
269                 return cds::opt::none();
270             }
271         };
272
273         struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
274         {
275             typedef cds::atomicity::item_counter item_counter;
276         };
277         class VyukovMPMCCycleQueue_dyn_ic
278             : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
279         {
280             typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
281         public:
282             VyukovMPMCCycleQueue_dyn_ic()
283                 : base_class( 1024 * 64 )
284             {}
285             VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
286                 : base_class( nCapacity )
287             {}
288
289             cds::opt::none statistics() const
290             {
291                 return cds::opt::none();
292             }
293         };
294
295
296         // BasketQueue
297
298         typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
299         typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
300
301         struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
302         {
303             typedef cds::opt::v::sequential_consistent mamory_model;
304         };
305         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_seqcst > BasketQueue_HP_seqcst;
306         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_seqcst > BasketQueue_DHP_seqcst;
307
308         struct traits_BasketQueue_ic : public cds::container::basket_queue::traits
309         {
310             typedef cds::atomicity::item_counter item_counter;
311         };
312         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_ic >BasketQueue_HP_ic;
313         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_ic >BasketQueue_DHP_ic;
314
315         struct traits_BasketQueue_stat : public cds::container::basket_queue::traits
316         {
317             typedef cds::container::basket_queue::stat<> stat;
318         };
319         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_stat > BasketQueue_HP_stat;
320         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_stat > BasketQueue_DHP_stat;
321
322
323         // RWQueue
324         typedef cds::container::RWQueue< Value > RWQueue_Spin;
325
326         struct traits_RWQueue_Spin_ic : public cds::container::rwqueue::traits
327         {
328             typedef cds::atomicity::item_counter item_counter;
329         };
330         typedef cds::container::RWQueue< Value, traits_RWQueue_Spin_ic > RWQueue_Spin_ic;
331
332         struct traits_RWQueue_mutex : public
333             cds::container::rwqueue::make_traits<
334                 cds::opt::lock_type< std::mutex >
335             >::type
336         {};
337         typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
338
339         // FCQueue
340         struct traits_FCQueue_stat:
341             public cds::container::fcqueue::make_traits<
342                 cds::opt::stat< cds::container::fcqueue::stat<> >
343             >::type
344         {};
345         struct traits_FCQueue_single_mutex_single_condvar:
346             public cds::container::fcqueue::make_traits<
347                 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
348             >::type
349         {};
350         struct traits_FCQueue_single_mutex_single_condvar_stat: traits_FCQueue_single_mutex_single_condvar
351         {
352             typedef cds::container::fcqueue::stat<> stat;
353         };
354         struct traits_FCQueue_single_mutex_multi_condvar:
355             public cds::container::fcqueue::make_traits<
356                 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
357             >::type
358         {};
359         struct traits_FCQueue_single_mutex_multi_condvar_stat: traits_FCQueue_single_mutex_multi_condvar
360         {
361             typedef cds::container::fcqueue::stat<> stat;
362         };
363         struct traits_FCQueue_multi_mutex_multi_condvar:
364             public cds::container::fcqueue::make_traits<
365                 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
366             >::type
367         {};
368         struct traits_FCQueue_multi_mutex_multi_condvar_stat: traits_FCQueue_multi_mutex_multi_condvar
369         {
370             typedef cds::container::fcqueue::stat<> stat;
371         };
372         struct traits_FCQueue_elimination:
373             public cds::container::fcqueue::make_traits<
374                 cds::opt::enable_elimination< true >
375             >::type
376         {};
377         struct traits_FCQueue_elimination_stat:
378             public cds::container::fcqueue::make_traits<
379                 cds::opt::enable_elimination< true >
380                 ,cds::opt::stat< cds::container::fcqueue::stat<> >
381             >::type
382         {};
383
384         typedef cds::container::FCQueue< Value > FCQueue_deque;
385         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_stat > FCQueue_deque_stat;
386         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar> FCQueue_deque_wait_ss;
387         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_deque_wait_ss_stat;
388         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_deque_wait_sm;
389         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_deque_wait_sm_stat;
390         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_deque_wait_mm;
391         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_deque_wait_mm_stat;
392
393         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
394         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
395
396         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>> FCQueue_list;
397         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_stat> FCQueue_list_stat;
398         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar> FCQueue_list_wait_ss;
399         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_list_wait_ss_stat;
400         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_list_wait_sm;
401         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_list_wait_sm_stat;
402         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_list_wait_mm;
403         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_list_wait_mm_stat;
404
405         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
406         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
407
408
409
410         typedef details::FCDequeL< Value > FCDequeL_default;
411         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_mutex;
412         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_stat;
413         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_wait_ss;
414         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
415         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_wait_sm;
416         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
417         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_wait_mm;
418         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
419         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_elimination;
420         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
421
422         typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
423         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
424         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
425         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
426
427         typedef details::FCDequeR< Value > FCDequeR_default;
428         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_mutex;
429         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_stat;
430         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_wait_ss;
431         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
432         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_wait_sm;
433         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
434         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_wait_mm;
435         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
436         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_elimination;
437         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
438
439         typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
440         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
441         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
442         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
443
444         // STL
445         typedef StdQueue_deque<Value>               StdQueue_deque_Spinlock;
446         typedef StdQueue_list<Value>                StdQueue_list_Spinlock;
447         typedef StdQueue_deque<Value, std::mutex>   StdQueue_deque_Mutex;
448         typedef StdQueue_list<Value, std::mutex>    StdQueue_list_Mutex;
449 #ifdef UNIT_LOCK_WIN_CS
450         typedef StdQueue_deque<Value, lock::win::CS>    StdQueue_deque_WinCS;
451         typedef StdQueue_list<Value, lock::win::CS>     StdQueue_list_WinCS;
452         typedef StdQueue_deque<Value, lock::win::Mutex> StdQueue_deque_WinMutex;
453         typedef StdQueue_list<Value, lock::win::Mutex>  StdQueue_list_WinMutex;
454 #endif
455
456         // SegmentedQueue
457         class traits_SegmentedQueue_spin_stat:
458             public cds::container::segmented_queue::make_traits<
459                 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
460             >::type
461         {};
462         class traits_SegmentedQueue_spin_padding:
463             public cds::container::segmented_queue::make_traits<
464                 cds::opt::padding< cds::opt::cache_line_padding >
465             >::type
466         {};
467         class traits_SegmentedQueue_mutex_stat:
468             public cds::container::segmented_queue::make_traits<
469                 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
470                 ,cds::opt::lock_type< std::mutex >
471             >::type
472         {};
473         class traits_SegmentedQueue_mutex:
474             public cds::container::segmented_queue::make_traits<
475                 cds::opt::lock_type< std::mutex >
476             >::type
477         {};
478         class traits_SegmentedQueue_mutex_padding:
479             public cds::container::segmented_queue::make_traits<
480                 cds::opt::lock_type< std::mutex >
481                 , cds::opt::padding< cds::opt::cache_line_padding >
482             >::type
483         {};
484
485         typedef cds::container::SegmentedQueue< cds::gc::HP, Value >  SegmentedQueue_HP_spin;
486         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_HP_spin_padding;
487         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_HP_spin_stat;
488         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_HP_mutex;
489         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_HP_mutex_padding;
490         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_HP_mutex_stat;
491
492         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value >  SegmentedQueue_DHP_spin;
493         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_DHP_spin_padding;
494         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_DHP_spin_stat;
495         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_DHP_mutex;
496         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_DHP_mutex_padding;
497         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_DHP_mutex_stat;
498     };
499
500     template <typename Value>
501     struct TypesFCHeavyValue {
502         typedef details::FCDequeL< Value > FCDequeL_HeavyValue_default;
503         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_HeavyValue_mutex;
504         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_HeavyValue_stat;
505         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_HeavyValue_wait_ss;
506         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_HeavyValue_wait_ss_stat;
507         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_HeavyValue_wait_sm;
508         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_HeavyValue_wait_sm_stat;
509         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_HeavyValue_wait_mm;
510         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_HeavyValue_wait_mm_stat;
511         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_HeavyValue_elimination;
512         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_HeavyValue_elimination_stat;
513
514         typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_HeavyValue_boost;
515         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_stat;
516         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination;
517         typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination_stat;
518
519         typedef details::FCDequeR< Value > FCDequeR_HeavyValue_default;
520         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_HeavyValue_mutex;
521         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_HeavyValue_stat;
522         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_HeavyValue_wait_ss;
523         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_HeavyValue_wait_ss_stat;
524         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_HeavyValue_wait_sm;
525         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_HeavyValue_wait_sm_stat;
526         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_HeavyValue_wait_mm;
527         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_HeavyValue_wait_mm_stat;
528         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_HeavyValue_elimination;
529         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_HeavyValue_elimination_stat;
530
531         typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_HeavyValue_boost;
532         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_stat;
533         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination;
534         typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination_stat;
535     };
536 }
537
538
539 // *********************************************
540 // Queue statistics
541 namespace cds_test {
542
543     template <typename Counter>
544     static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::stat<Counter> const& s )
545     {
546             return o
547                 << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
548                 << CDSSTRESS_STAT_OUT( s, m_nEnqMove )
549                 << CDSSTRESS_STAT_OUT( s, m_nDequeue )
550                 << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
551                 << CDSSTRESS_STAT_OUT( s, m_nCollided )
552                 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
553     }
554
555     static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
556     {
557         return o;
558     }
559
560     static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
561     {
562         return o;
563     }
564
565     static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
566     {
567         return o
568             << CDSSTRESS_STAT_OUT( s, m_nPushFront )
569             << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
570             << CDSSTRESS_STAT_OUT( s, m_nPushBack )
571             << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
572             << CDSSTRESS_STAT_OUT( s, m_nPopFront )
573             << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
574             << CDSSTRESS_STAT_OUT( s, m_nPopBack )
575             << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
576             << CDSSTRESS_STAT_OUT( s, m_nCollided )
577             << static_cast<cds::algo::flat_combining::stat<> const&>(s);
578     }
579
580 } // namespace cds_test
581
582 #define CDSSTRESS_Queue_F( test_fixture, type_name, level ) \
583     TEST_F( test_fixture, type_name ) \
584     { \
585         if ( !check_detail_level( level )) return; \
586         typedef queue::Types< value_type >::type_name queue_type; \
587         queue_type queue; \
588         test( queue ); \
589     }
590
591 #define CDSSTRESS_FCQueue_F( test_fixture, type_name, level ) \
592     TEST_F( test_fixture, type_name ) \
593     { \
594         if ( !check_detail_level( level )) return; \
595         typedef queue::TypesFCHeavyValue< value_type >::type_name queue_type; \
596         queue_type queue; \
597         test( queue ); \
598     }
599
600 #define CDSSTRESS_MSQueue( test_fixture ) \
601     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP,                0 ) \
602     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst,         2 ) \
603     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic,             1 ) \
604     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat,           0 ) \
605     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP,               0 ) \
606     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst,        2 ) \
607     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic,            1 ) \
608     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat,          0 )
609
610 #define CDSSTRESS_MoirQueue( test_fixture ) \
611     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP,              0 ) \
612     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst,       2 ) \
613     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic,           1 ) \
614     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat,         0 ) \
615     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP,             0 ) \
616     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst,      2 ) \
617     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic,          1 ) \
618     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat,        0 )
619
620 #define CDSSTRESS_OptimsticQueue( test_fixture ) \
621     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP,                0 ) \
622     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst,         2 ) \
623     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic,             1 ) \
624     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat,           0 ) \
625     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP,               0 ) \
626     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst,        2 ) \
627     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic,            1 ) \
628     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat,          0 )
629
630 #define CDSSTRESS_BasketQueue( test_fixture ) \
631     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP,                0 ) \
632     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst,         2 ) \
633     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic,             1 ) \
634     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat,           0 ) \
635     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP,               0 ) \
636     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst,        2 ) \
637     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic,            1 ) \
638     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat,          0 )
639
640 #define CDSSTRESS_FCQueue( test_fixture ) \
641     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque,                 0 ) \
642     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_stat,            0 ) \
643     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss,         1 ) \
644     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss_stat,    0 ) \
645     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm,         1 ) \
646     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm_stat,    0 ) \
647     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm,         1 ) \
648     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm_stat,    0 ) \
649     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination,     1 ) \
650     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat,0 ) \
651     CDSSTRESS_Queue_F( test_fixture, FCQueue_list,                  0 ) \
652     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_stat,             0 ) \
653     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss,          1 ) \
654     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss_stat,     0 ) \
655     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm,          1 ) \
656     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm_stat,     0 ) \
657     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm,          1 ) \
658     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm_stat,     0 ) \
659     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination,      1 ) \
660     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat, 0 )
661
662
663 #define CDSSTRESS_FCDeque( test_fixture ) \
664     CDSSTRESS_Queue_F( test_fixture, FCDequeL_default,              0 ) \
665     CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex,                1 ) \
666     CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat,                 1 ) \
667     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss,              1 )\
668     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat,         0 ) \
669     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm,              1 ) \
670     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat,         0 ) \
671     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm,              1 ) \
672     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm_stat,         0 ) \
673     CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination,          1 ) \
674     CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat,     0 ) \
675     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost,                1 ) \
676     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_stat,           0 ) \
677     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination,    1 ) \
678     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination_stat, 1 ) \
679     CDSSTRESS_Queue_F( test_fixture, FCDequeR_default,              0 ) \
680     CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex,                0 ) \
681     CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat,                 0 ) \
682     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss,              1 ) \
683     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss_stat,         0 ) \
684     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm,              1 ) \
685     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm_stat,         0 ) \
686     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm,              1 ) \
687     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm_stat,         0 ) \
688     CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination,          1 ) \
689     CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat,     0 ) \
690     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost,                1 ) \
691     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_stat,           0 ) \
692     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination,    1 ) \
693     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat, 1 )
694
695 #define CDSSTRESS_FCDeque_HeavyValue( test_fixture ) \
696     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default,              0 ) \
697     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_mutex,                0 ) \
698     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_stat,                 0 ) \
699     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss,              1 ) \
700     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss_stat,         1 ) \
701     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm,              1 ) \
702     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm_stat,         1 ) \
703     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm,              1 ) \
704     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm_stat,         1 ) \
705     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination,          1 ) \
706     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination_stat,     1 ) \
707     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost,                1 ) \
708     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_stat,           1 ) \
709     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination,    1 ) \
710     CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination_stat, 1 ) \
711     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_default,              1 ) \
712     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_mutex,                1 ) \
713     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_stat,                 1 ) \
714     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss,              1 ) \
715     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss_stat,         1 ) \
716     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm,              1 ) \
717     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm_stat,         1 ) \
718     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm,              1 ) \
719     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm_stat,         1 ) \
720     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination,          1 ) \
721     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination_stat,     1 ) \
722     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost,                1 ) \
723     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_stat,           1 ) \
724     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination,    1 ) \
725     CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination_stat, 1 )
726
727 #define CDSSTRESS_RWQueue( test_fixture ) \
728     CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin,      0 ) \
729     CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic,   1 ) \
730     CDSSTRESS_Queue_F( test_fixture, RWQueue_mutex,     0 )
731
732 #define CDSSTRESS_SegmentedQueue( test_fixture ) \
733     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin,            0 ) \
734     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_padding,    0 ) \
735     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_stat,       0 ) \
736     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex,           0 ) \
737     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_padding,   1 ) \
738     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_stat,      0 ) \
739     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin,           0 ) \
740     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding,   1 ) \
741     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_stat,      0 ) \
742     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex,          0 ) \
743     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_padding,  1 ) \
744     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_stat,     0 )
745
746
747 #define CDSSTRESS_VyukovQueue( test_fixture ) \
748     CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn,              0 ) \
749     CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic,           1 )
750
751 #define CDSSTRESS_StdQueue( test_fixture ) \
752     CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock,   0 ) \
753     CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock,    0 ) \
754     CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex,      1 ) \
755     CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex,       1 )
756
757 #endif // #ifndef CDSSTRESS_QUEUE_TYPES_H