Merge branch 'dev' of github.com:khizmax/libcds into dev
[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-2016
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/tsigas_cycle_queue.h>
39 #include <cds/container/vyukov_mpmc_cycle_queue.h>
40 #include <cds/container/basket_queue.h>
41 #include <cds/container/fcqueue.h>
42 #include <cds/container/fcdeque.h>
43 #include <cds/container/segmented_queue.h>
44
45 #include <cds/gc/hp.h>
46 #include <cds/gc/dhp.h>
47
48 #include "std_queue.h"
49 #include "lock/win32_lock.h"
50 #include "framework/michael_alloc.h"
51
52 #include <boost/container/deque.hpp>
53
54 #include <cds_test/stress_test.h>
55 #include <cds_test/stat_flat_combining_out.h>
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     template <typename Value>
132     struct Types {
133
134         // MSQueue
135         typedef cds::container::MSQueue<cds::gc::HP,  Value > MSQueue_HP;
136         typedef cds::container::MSQueue<cds::gc::DHP, Value > MSQueue_DHP;
137         typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
138         typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
139
140         struct traits_MSQueue_michaelAlloc : public cds::container::msqueue::traits
141         {
142             typedef memory::MichaelAllocator<int>  allocator;
143         };
144         typedef cds::container::MSQueue<cds::gc::HP,  Value, traits_MSQueue_michaelAlloc > MSQueue_HP_michaelAlloc;
145         typedef cds::container::MSQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MSQueue_DHP_michaelAlloc;
146         typedef cds::container::MoirQueue<cds::gc::HP, Value, traits_MSQueue_michaelAlloc > MoirQueue_HP_michaelAlloc;
147         typedef cds::container::MoirQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MoirQueue_DHP_michaelAlloc;
148
149         struct traits_MSQueue_seqcst : public
150             cds::container::msqueue::make_traits <
151                 cds::opt::memory_model < cds::opt::v::sequential_consistent >
152             > ::type
153         {};
154         typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_seqcst > MSQueue_HP_seqcst;
155         typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MSQueue_DHP_seqcst;
156         typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MoirQueue_HP_seqcst;
157         typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MoirQueue_DHP_seqcst;
158
159         // MSQueue + item counter
160         struct traits_MSQueue_ic : public
161             cds::container::msqueue::make_traits <
162                 cds::opt::item_counter < cds::atomicity::item_counter >
163             >::type
164         {};
165         typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_ic > MSQueue_HP_ic;
166         typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MSQueue_DHP_ic;
167         typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_ic > MoirQueue_HP_ic;
168         typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MoirQueue_DHP_ic;
169
170         // MSQueue + stat
171         struct traits_MSQueue_stat: public
172             cds::container::msqueue::make_traits <
173                 cds::opt::stat< cds::container::msqueue::stat<> >
174             >::type
175         {};
176         typedef cds::container::MSQueue< cds::gc::HP,  Value, traits_MSQueue_stat > MSQueue_HP_stat;
177         typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MSQueue_DHP_stat;
178         typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_stat > MoirQueue_HP_stat;
179         typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MoirQueue_DHP_stat;
180
181
182         // OptimisticQueue
183         typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
184         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
185
186         struct traits_OptimisticQueue_michaelAlloc : public cds::container::optimistic_queue::traits
187         {
188             typedef memory::MichaelAllocator<int> allocator;
189         };
190         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_HP_michaelAlloc;
191         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_DHP_michaelAlloc;
192
193         struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
194         {
195             typedef cds::opt::v::sequential_consistent memory_model;
196         };
197         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_seqcst > OptimisticQueue_HP_seqcst;
198         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_DHP_seqcst;
199
200         struct traits_OptimisticQueue_ic : public cds::container::optimistic_queue::traits
201         {
202             typedef cds::atomicity::item_counter item_counter;
203         };
204         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_ic > OptimisticQueue_HP_ic;
205         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_ic > OptimisticQueue_DHP_ic;
206
207         struct traits_OptimisticQueue_stat : public
208             cds::container::optimistic_queue::make_traits <
209                 cds::opt::stat < cds::intrusive::optimistic_queue::stat<> >
210             > ::type
211         {};
212         typedef cds::container::OptimisticQueue< cds::gc::HP,  Value, traits_OptimisticQueue_stat > OptimisticQueue_HP_stat;
213         typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_stat > OptimisticQueue_DHP_stat;
214
215
216         // TsigasCycleQueue
217
218         class TsigasCycleQueue_dyn
219             : public cds::container::TsigasCycleQueue< Value,
220                 typename cds::container::tsigas_queue::make_traits<
221                     cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
222                 >::type
223             >
224         {
225             typedef cds::container::TsigasCycleQueue< Value,
226                 typename cds::container::tsigas_queue::make_traits<
227                     cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
228                 >::type
229             > base_class;
230         public:
231             TsigasCycleQueue_dyn()
232                 : base_class( 1024 * 64 )
233             {}
234
235             TsigasCycleQueue_dyn( size_t nCapacity )
236                 : base_class( nCapacity )
237             {}
238
239             cds::opt::none statistics() const
240             {
241                 return cds::opt::none();
242             }
243         };
244
245         class TsigasCycleQueue_dyn_michaelAlloc
246             : public cds::container::TsigasCycleQueue< Value,
247                 typename cds::container::tsigas_queue::make_traits<
248                     cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
249                     ,cds::opt::allocator< memory::MichaelAllocator<int> >
250                 >::type
251             >
252         {
253             typedef cds::container::TsigasCycleQueue< Value,
254                 typename cds::container::tsigas_queue::make_traits<
255                    cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
256                     , cds::opt::allocator< memory::MichaelAllocator<int> >
257                 >::type
258             > base_class;
259         public:
260             TsigasCycleQueue_dyn_michaelAlloc()
261                 : base_class( 1024 * 64 )
262             {}
263
264             TsigasCycleQueue_dyn_michaelAlloc( size_t nCapacity )
265                 : base_class( nCapacity )
266             {}
267
268             cds::opt::none statistics() const
269             {
270                 return cds::opt::none();
271             }
272         };
273
274         class TsigasCycleQueue_dyn_ic
275             : public cds::container::TsigasCycleQueue< Value,
276                 typename cds::container::tsigas_queue::make_traits<
277                     cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
278                     ,cds::opt::item_counter< cds::atomicity::item_counter >
279                 >::type
280             >
281         {
282             typedef cds::container::TsigasCycleQueue< Value,
283                 typename cds::container::tsigas_queue::make_traits<
284                     cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
285                     ,cds::opt::item_counter< cds::atomicity::item_counter >
286                 >::type
287             > base_class;
288         public:
289             TsigasCycleQueue_dyn_ic()
290                 : base_class( 1024 * 64 )
291             {}
292             TsigasCycleQueue_dyn_ic( size_t nCapacity )
293                 : base_class( nCapacity )
294             {}
295
296             cds::opt::none statistics() const
297             {
298                 return cds::opt::none();
299             }
300         };
301
302         // VyukovMPMCCycleQueue
303         struct traits_VyukovMPMCCycleQueue_dyn : public cds::container::vyukov_queue::traits
304         {
305             typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
306         };
307         class VyukovMPMCCycleQueue_dyn
308             : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn >
309         {
310             typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn > base_class;
311         public:
312             VyukovMPMCCycleQueue_dyn()
313                 : base_class( 1024 * 64 )
314             {}
315             VyukovMPMCCycleQueue_dyn( size_t nCapacity )
316                 : base_class( nCapacity )
317             {}
318
319             cds::opt::none statistics() const
320             {
321                 return cds::opt::none();
322             }
323         };
324
325         struct traits_VyukovMPMCCycleQueue_dyn_michaelAlloc : public cds::container::vyukov_queue::traits
326         {
327             typedef cds::opt::v::uninitialized_dynamic_buffer< int, memory::MichaelAllocator<int> > buffer;
328         };
329         class VyukovMPMCCycleQueue_dyn_michaelAlloc
330             : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc >
331         {
332             typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > base_class;
333         public:
334             VyukovMPMCCycleQueue_dyn_michaelAlloc()
335                 : base_class( 1024 * 64 )
336             {}
337             VyukovMPMCCycleQueue_dyn_michaelAlloc( size_t nCapacity )
338                 : base_class( nCapacity )
339             {}
340
341             cds::opt::none statistics() const
342             {
343                 return cds::opt::none();
344             }
345         };
346
347         struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
348         {
349             typedef cds::atomicity::item_counter item_counter;
350         };
351         class VyukovMPMCCycleQueue_dyn_ic
352             : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
353         {
354             typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
355         public:
356             VyukovMPMCCycleQueue_dyn_ic()
357                 : base_class( 1024 * 64 )
358             {}
359             VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
360                 : base_class( nCapacity )
361             {}
362
363             cds::opt::none statistics() const
364             {
365                 return cds::opt::none();
366             }
367         };
368
369
370         // BasketQueue
371
372         typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
373         typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
374
375         struct traits_BasketQueue_michaelAlloc : public cds::container::basket_queue::traits
376         {
377             typedef memory::MichaelAllocator<int> allocator;
378         };
379         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_michaelAlloc > BasketQueue_HP_michaelAlloc;
380         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_DHP_michaelAlloc;
381
382         struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
383         {
384             typedef cds::opt::v::sequential_consistent mamory_model;
385         };
386         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_seqcst > BasketQueue_HP_seqcst;
387         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_seqcst > BasketQueue_DHP_seqcst;
388
389         struct traits_BasketQueue_ic : public cds::container::basket_queue::traits
390         {
391             typedef cds::atomicity::item_counter item_counter;
392         };
393         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_ic >BasketQueue_HP_ic;
394         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_ic >BasketQueue_DHP_ic;
395
396         struct traits_BasketQueue_stat : public cds::container::basket_queue::traits
397         {
398             typedef cds::container::basket_queue::stat<> stat;
399         };
400         typedef cds::container::BasketQueue< cds::gc::HP,  Value, traits_BasketQueue_stat > BasketQueue_HP_stat;
401         typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_stat > BasketQueue_DHP_stat;
402
403
404         // RWQueue
405         typedef cds::container::RWQueue< Value > RWQueue_Spin;
406
407         struct traits_RWQueue_Spin_ic : public cds::container::rwqueue::traits
408         {
409             typedef cds::atomicity::item_counter item_counter;
410         };
411         typedef cds::container::RWQueue< Value, traits_RWQueue_Spin_ic > RWQueue_Spin_ic;
412
413         struct traits_RWQueue_mutex : public
414             cds::container::rwqueue::make_traits<
415                 cds::opt::lock_type< std::mutex >
416             >::type
417         {};
418         typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
419
420         // FCQueue
421         struct traits_FCQueue_stat:
422             public cds::container::fcqueue::make_traits<
423                 cds::opt::stat< cds::container::fcqueue::stat<> >
424             >::type
425         {};
426         struct traits_FCQueue_single_mutex_single_condvar:
427             public cds::container::fcqueue::make_traits<
428                 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
429             >::type
430         {};
431         struct traits_FCQueue_single_mutex_single_condvar_stat: traits_FCQueue_single_mutex_single_condvar
432         {
433             typedef cds::container::fcqueue::stat<> stat;
434         };
435         struct traits_FCQueue_single_mutex_multi_condvar:
436             public cds::container::fcqueue::make_traits<
437                 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
438             >::type
439         {};
440         struct traits_FCQueue_single_mutex_multi_condvar_stat: traits_FCQueue_single_mutex_multi_condvar
441         {
442             typedef cds::container::fcqueue::stat<> stat;
443         };
444         struct traits_FCQueue_multi_mutex_multi_condvar:
445             public cds::container::fcqueue::make_traits<
446                 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
447             >::type
448         {};
449         struct traits_FCQueue_multi_mutex_multi_condvar_stat: traits_FCQueue_multi_mutex_multi_condvar
450         {
451             typedef cds::container::fcqueue::stat<> stat;
452         };
453         struct traits_FCQueue_elimination:
454             public cds::container::fcqueue::make_traits<
455                 cds::opt::enable_elimination< true >
456             >::type
457         {};
458         struct traits_FCQueue_elimination_stat:
459             public cds::container::fcqueue::make_traits<
460                 cds::opt::enable_elimination< true >
461                 ,cds::opt::stat< cds::container::fcqueue::stat<> >
462             >::type
463         {};
464
465         typedef cds::container::FCQueue< Value > FCQueue_deque;
466         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_stat > FCQueue_deque_stat;
467         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar> FCQueue_deque_wait_ss;
468         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_deque_wait_ss_stat;
469         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_deque_wait_sm;
470         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_deque_wait_sm_stat;
471         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_deque_wait_mm;
472         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_deque_wait_mm_stat;
473
474         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
475         typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
476
477         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>> FCQueue_list;
478         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_stat> FCQueue_list_stat;
479         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar> FCQueue_list_wait_ss;
480         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_list_wait_ss_stat;
481         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_list_wait_sm;
482         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_list_wait_sm_stat;
483         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_list_wait_mm;
484         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_list_wait_mm_stat;
485
486         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
487         typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
488
489
490    // FCDeque
491         struct traits_FCDeque_stat:
492             public cds::container::fcdeque::make_traits<
493                 cds::opt::stat< cds::container::fcdeque::stat<> >
494             >::type
495         {};
496         struct traits_FCDeque_elimination:
497             public cds::container::fcdeque::make_traits<
498                 cds::opt::enable_elimination< true >
499             >::type
500         {};
501         struct traits_FCDeque_elimination_stat:
502             public cds::container::fcdeque::make_traits<
503                 cds::opt::stat< cds::container::fcdeque::stat<> >,
504                 cds::opt::enable_elimination< true >
505             >::type
506         {};
507         struct traits_FCDeque_mutex:
508             public cds::container::fcdeque::make_traits<
509                 cds::opt::lock_type< std::mutex >
510             >::type
511         {};
512
513         struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
514         {
515             typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
516         };
517         struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
518         {
519             typedef cds::container::fcdeque::stat<> stat;
520         };
521         struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
522         {
523             typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
524         };
525         struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
526         {
527             typedef cds::container::fcdeque::stat<> stat;
528         };
529         struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
530         {
531             typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
532         };
533         struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
534         {
535             typedef cds::container::fcdeque::stat<> stat;
536         };
537
538         typedef details::FCDequeL< Value > FCDequeL_default;
539         typedef details::FCDequeL< Value, traits_FCDeque_mutex > FCDequeL_mutex;
540         typedef details::FCDequeL< Value, traits_FCDeque_stat > FCDequeL_stat;
541         typedef details::FCDequeL< Value, traits_FCDeque_wait_ss > FCDequeL_wait_ss;
542         typedef details::FCDequeL< Value, traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
543         typedef details::FCDequeL< Value, traits_FCDeque_wait_sm > FCDequeL_wait_sm;
544         typedef details::FCDequeL< Value, traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
545         typedef details::FCDequeL< Value, traits_FCDeque_wait_mm > FCDequeL_wait_mm;
546         typedef details::FCDequeL< Value, traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
547         typedef details::FCDequeL< Value, traits_FCDeque_elimination > FCDequeL_elimination;
548         typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
549
550         typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
551         typedef details::FCDequeL< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
552         typedef details::FCDequeL< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
553         typedef details::FCDequeL< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
554
555         typedef details::FCDequeR< Value > FCDequeR_default;
556         typedef details::FCDequeR< Value, traits_FCDeque_mutex > FCDequeR_mutex;
557         typedef details::FCDequeR< Value, traits_FCDeque_stat > FCDequeR_stat;
558         typedef details::FCDequeR< Value, traits_FCDeque_wait_ss > FCDequeR_wait_ss;
559         typedef details::FCDequeR< Value, traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
560         typedef details::FCDequeR< Value, traits_FCDeque_wait_sm > FCDequeR_wait_sm;
561         typedef details::FCDequeR< Value, traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
562         typedef details::FCDequeR< Value, traits_FCDeque_wait_mm > FCDequeR_wait_mm;
563         typedef details::FCDequeR< Value, traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
564         typedef details::FCDequeR< Value, traits_FCDeque_elimination > FCDequeR_elimination;
565         typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
566
567         typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
568         typedef details::FCDequeR< Value, traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
569         typedef details::FCDequeR< Value, traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
570         typedef details::FCDequeR< Value, traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
571
572         // STL
573         typedef StdQueue_deque<Value>               StdQueue_deque_Spinlock;
574         typedef StdQueue_list<Value>                StdQueue_list_Spinlock;
575         typedef StdQueue_deque<Value, std::mutex>   StdQueue_deque_Mutex;
576         typedef StdQueue_list<Value, std::mutex>    StdQueue_list_Mutex;
577 #ifdef UNIT_LOCK_WIN_CS
578         typedef StdQueue_deque<Value, lock::win::CS>    StdQueue_deque_WinCS;
579         typedef StdQueue_list<Value, lock::win::CS>     StdQueue_list_WinCS;
580         typedef StdQueue_deque<Value, lock::win::Mutex> StdQueue_deque_WinMutex;
581         typedef StdQueue_list<Value, lock::win::Mutex>  StdQueue_list_WinMutex;
582 #endif
583
584         // SegmentedQueue
585         class traits_SegmentedQueue_spin_stat:
586             public cds::container::segmented_queue::make_traits<
587                 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
588             >::type
589         {};
590         class traits_SegmentedQueue_spin_padding:
591             public cds::container::segmented_queue::make_traits<
592                 cds::opt::padding< cds::opt::cache_line_padding >
593             >::type
594         {};
595         class traits_SegmentedQueue_mutex_stat:
596             public cds::container::segmented_queue::make_traits<
597                 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
598                 ,cds::opt::lock_type< std::mutex >
599             >::type
600         {};
601         class traits_SegmentedQueue_mutex:
602             public cds::container::segmented_queue::make_traits<
603                 cds::opt::lock_type< std::mutex >
604             >::type
605         {};
606         class traits_SegmentedQueue_mutex_padding:
607             public cds::container::segmented_queue::make_traits<
608                 cds::opt::lock_type< std::mutex >
609                 , cds::opt::padding< cds::opt::cache_line_padding >
610             >::type
611         {};
612
613         typedef cds::container::SegmentedQueue< cds::gc::HP, Value >  SegmentedQueue_HP_spin;
614         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_HP_spin_padding;
615         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_HP_spin_stat;
616         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_HP_mutex;
617         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_HP_mutex_padding;
618         typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_HP_mutex_stat;
619
620         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value >  SegmentedQueue_DHP_spin;
621         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_padding >  SegmentedQueue_DHP_spin_padding;
622         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_stat >  SegmentedQueue_DHP_spin_stat;
623         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex >  SegmentedQueue_DHP_mutex;
624         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding >  SegmentedQueue_DHP_mutex_padding;
625         typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat >  SegmentedQueue_DHP_mutex_stat;
626     };
627 }
628
629
630 // *********************************************
631 // Queue statistics
632 namespace cds_test {
633
634     template <typename Counter>
635     static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::stat<Counter> const& s )
636     {
637             return o
638                 << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
639                 << CDSSTRESS_STAT_OUT( s, m_nEnqMove )
640                 << CDSSTRESS_STAT_OUT( s, m_nDequeue )
641                 << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
642                 << CDSSTRESS_STAT_OUT( s, m_nCollided )
643                 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
644     }
645
646     static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
647     {
648         return o;
649     }
650
651     static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
652     {
653         return o;
654     }
655
656     static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
657     {
658         return o
659             << CDSSTRESS_STAT_OUT( s, m_nPushFront )
660             << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
661             << CDSSTRESS_STAT_OUT( s, m_nPushBack )
662             << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
663             << CDSSTRESS_STAT_OUT( s, m_nPopFront )
664             << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
665             << CDSSTRESS_STAT_OUT( s, m_nPopBack )
666             << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
667             << CDSSTRESS_STAT_OUT( s, m_nCollided )
668             << static_cast<cds::algo::flat_combining::stat<> const&>(s);
669     }
670
671 } // namespace cds_test
672
673 #define CDSSTRESS_Queue_F( test_fixture, type_name, level ) \
674     TEST_F( test_fixture, type_name ) \
675     { \
676         if ( !check_detail_level( level )) return; \
677         typedef queue::Types< value_type >::type_name queue_type; \
678         queue_type queue; \
679         test( queue ); \
680     }
681
682 #define CDSSTRESS_MSQueue( test_fixture ) \
683     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP,                0 ) \
684     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_michaelAlloc,   0 ) \
685     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst,         2 ) \
686     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic,             1 ) \
687     CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat,           0 ) \
688     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP,               0 ) \
689     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_michaelAlloc,  0 ) \
690     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst,        2 ) \
691     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic,            1 ) \
692     CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat,          0 )
693
694 #define CDSSTRESS_MoirQueue( test_fixture ) \
695     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP,              0 ) \
696     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_michaelAlloc, 0 ) \
697     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst,       2 ) \
698     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic,           1 ) \
699     CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat,         0 ) \
700     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP,             0 ) \
701     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_michaelAlloc,0 ) \
702     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst,      2 ) \
703     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic,          1 ) \
704     CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat,        0 )
705
706 #define CDSSTRESS_OptimsticQueue( test_fixture ) \
707     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP,                0 ) \
708     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_michaelAlloc,   0 ) \
709     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst,         2 ) \
710     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic,             1 ) \
711     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat,           0 ) \
712     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP,               0 ) \
713     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_michaelAlloc,  0 ) \
714     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst,        2 ) \
715     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic,            1 ) \
716     CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat,          0 )
717
718 #define CDSSTRESS_BasketQueue( test_fixture ) \
719     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP,                0 ) \
720     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_michaelAlloc,   0 ) \
721     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst,         2 ) \
722     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic,             1 ) \
723     CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat,           0 ) \
724     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP,               0 ) \
725     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_michaelAlloc,  0 ) \
726     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst,        2 ) \
727     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic,            1 ) \
728     CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat,          0 )
729
730 #define CDSSTRESS_FCQueue( test_fixture ) \
731     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque,                 0 ) \
732     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_stat,            0 ) \
733     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss,         1 ) \
734     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss_stat,    0 ) \
735     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm,         1 ) \
736     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm_stat,    0 ) \
737     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm,         1 ) \
738     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm_stat,    0 ) \
739     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination,     1 ) \
740     CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat,0 ) \
741     CDSSTRESS_Queue_F( test_fixture, FCQueue_list,                  0 ) \
742     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_stat,             0 ) \
743     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss,          1 ) \
744     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss_stat,     0 ) \
745     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm,          1 ) \
746     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm_stat,     0 ) \
747     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm,          1 ) \
748     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm_stat,     0 ) \
749     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination,      1 ) \
750     CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat, 0 )
751
752 #define CDSSTRESS_FCDeque( test_fixture ) \
753     CDSSTRESS_Queue_F( test_fixture, FCDequeL_default,              0 ) \
754     CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex,                0 ) \
755     CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat,                 0 ) \
756     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss,              1 ) \
757     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat,         0 ) \
758     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm,              1 ) \
759     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat,         0 ) \
760     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm,              1 ) \
761     CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm_stat,         0 ) \
762     CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination,          1 ) \
763     CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat,     0 ) \
764     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost,                1 ) \
765     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_stat,           0 ) \
766     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination,    1 ) \
767     CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination_stat, 1 ) \
768     CDSSTRESS_Queue_F( test_fixture, FCDequeR_default,              0 ) \
769     CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex,                0 ) \
770     CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat,                 0 ) \
771     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss,              1 ) \
772     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss_stat,         0 ) \
773     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm,              1 ) \
774     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm_stat,         0 ) \
775     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm,              1 ) \
776     CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm_stat,         0 ) \
777     CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination,          1 ) \
778     CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat,     0 ) \
779     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost,                1 ) \
780     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_stat,           0 ) \
781     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination,    1 ) \
782     CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat, 1 )
783
784 #define CDSSTRESS_RWQueue( test_fixture ) \
785     CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin,      0 ) \
786     CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic,   1 ) \
787     CDSSTRESS_Queue_F( test_fixture, RWQueue_mutex,     0 )
788
789 #define CDSSTRESS_SegmentedQueue( test_fixture ) \
790     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin,            0 ) \
791     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_padding,    0 ) \
792     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_stat,       0 ) \
793     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex,           0 ) \
794     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_padding,   1 ) \
795     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_stat,      0 ) \
796     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin,           0 ) \
797     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding,   1 ) \
798     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_stat,      0 ) \
799     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex,          0 ) \
800     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_padding,  1 ) \
801     CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_stat,     0 )
802
803
804 #define CDSSTRESS_TsigasQueue( test_fixture ) \
805     CDSSTRESS_Queue_F( test_fixture, TsigasCycleQueue_dyn,              0 ) \
806     CDSSTRESS_Queue_F( test_fixture, TsigasCycleQueue_dyn_michaelAlloc, 0 ) \
807     CDSSTRESS_Queue_F( test_fixture, TsigasCycleQueue_dyn_ic,           1 )
808
809 #define CDSSTRESS_VyukovQueue( test_fixture ) \
810     CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn,              0 ) \
811     CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_michaelAlloc, 0 ) \
812     CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic,           1 )
813
814 #define CDSSTRESS_StdQueue( test_fixture ) \
815     CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock,   0 ) \
816     CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock,    0 ) \
817     CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex,      1 ) \
818     CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex,       1 )
819
820 #endif // #ifndef CDSSTRESS_QUEUE_TYPES_H