2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
6 Source code repo: http://github.com/khizmax/libcds/
7 Download: http://sourceforge.net/projects/libcds/files/
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are met:
12 * Redistributions of source code must retain the above copyright notice, this
13 list of conditions and the following disclaimer.
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.
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.
31 #ifndef CDSSTRESS_QUEUE_TYPES_H
32 #define CDSSTRESS_QUEUE_TYPES_H
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 #include <cds/container/weak_ringbuffer.h>
45 #include <cds/gc/hp.h>
46 #include <cds/gc/dhp.h>
48 #include "std_queue.h"
49 #include "lock/win32_lock.h"
51 #include <boost/container/deque.hpp>
53 #include <cds_test/stress_test.h>
54 #include <cds_test/stat_flat_combining_out.h>
55 #include <cds_test/fc_hevy_value.h>
57 #include "print_stat.h"
62 template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque=std::deque<T> >
63 class FCDequeL: public cds::container::FCDeque<T, Deque, Traits >
65 typedef cds::container::FCDeque<T, Deque, Traits > base_class;
71 unsigned int nCompactFactor ///< Flat combining: publication list compacting factor
72 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
74 : base_class( nCompactFactor, nCombinePassCount )
77 bool push( T const& v )
79 return base_class::push_front( v );
81 bool enqueue( T const& v )
88 return base_class::pop_back( v );
96 template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque = std::deque<T> >
97 class FCDequeR: public cds::container::FCDeque<T, Deque, Traits >
99 typedef cds::container::FCDeque<T, Deque, Traits > base_class;
105 unsigned int nCompactFactor ///< Flat combining: publication list compacting factor
106 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
108 : base_class( nCompactFactor, nCombinePassCount )
111 bool push( T const& v )
113 return base_class::push_back( v );
115 bool enqueue( T const& v )
122 return base_class::pop_front( v );
130 } // namespace details
132 namespace fc_details{
134 struct traits_FCDeque_stat:
135 public cds::container::fcdeque::make_traits<
136 cds::opt::stat< cds::container::fcdeque::stat<> >
139 struct traits_FCDeque_elimination:
140 public cds::container::fcdeque::make_traits<
141 cds::opt::enable_elimination< true >
144 struct traits_FCDeque_elimination_stat:
145 public cds::container::fcdeque::make_traits<
146 cds::opt::stat< cds::container::fcdeque::stat<> >,
147 cds::opt::enable_elimination< true >
150 struct traits_FCDeque_mutex:
151 public cds::container::fcdeque::make_traits<
152 cds::opt::lock_type< std::mutex >
156 struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
158 typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
160 struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
162 typedef cds::container::fcdeque::stat<> stat;
164 struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
166 typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
168 struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
170 typedef cds::container::fcdeque::stat<> stat;
172 struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
174 typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
176 struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
178 typedef cds::container::fcdeque::stat<> stat;
182 template <typename Value>
186 typedef cds::container::MSQueue<cds::gc::HP, Value > MSQueue_HP;
187 typedef cds::container::MSQueue<cds::gc::DHP, Value > MSQueue_DHP;
188 typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
189 typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
191 struct traits_MSQueue_seqcst : public
192 cds::container::msqueue::make_traits <
193 cds::opt::memory_model < cds::opt::v::sequential_consistent >
196 typedef cds::container::MSQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MSQueue_HP_seqcst;
197 typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MSQueue_DHP_seqcst;
198 typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MoirQueue_HP_seqcst;
199 typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MoirQueue_DHP_seqcst;
201 // MSQueue + item counter
202 struct traits_MSQueue_ic : public
203 cds::container::msqueue::make_traits <
204 cds::opt::item_counter < cds::atomicity::item_counter >
207 typedef cds::container::MSQueue< cds::gc::HP, Value, traits_MSQueue_ic > MSQueue_HP_ic;
208 typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MSQueue_DHP_ic;
209 typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_ic > MoirQueue_HP_ic;
210 typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MoirQueue_DHP_ic;
213 struct traits_MSQueue_stat: public
214 cds::container::msqueue::make_traits <
215 cds::opt::stat< cds::container::msqueue::stat<> >
218 typedef cds::container::MSQueue< cds::gc::HP, Value, traits_MSQueue_stat > MSQueue_HP_stat;
219 typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MSQueue_DHP_stat;
220 typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_stat > MoirQueue_HP_stat;
221 typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MoirQueue_DHP_stat;
225 typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
226 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
228 struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
230 typedef cds::opt::v::sequential_consistent memory_model;
232 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_HP_seqcst;
233 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_DHP_seqcst;
235 struct traits_OptimisticQueue_ic : public cds::container::optimistic_queue::traits
237 typedef cds::atomicity::item_counter item_counter;
239 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_ic > OptimisticQueue_HP_ic;
240 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_ic > OptimisticQueue_DHP_ic;
242 struct traits_OptimisticQueue_stat : public
243 cds::container::optimistic_queue::make_traits <
244 cds::opt::stat < cds::intrusive::optimistic_queue::stat<> >
247 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_stat > OptimisticQueue_HP_stat;
248 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_stat > OptimisticQueue_DHP_stat;
251 // VyukovMPMCCycleQueue
252 struct traits_VyukovMPMCCycleQueue_dyn : public cds::container::vyukov_queue::traits
254 typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
256 class VyukovMPMCCycleQueue_dyn
257 : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn >
259 typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn > base_class;
261 VyukovMPMCCycleQueue_dyn()
262 : base_class( 1024 * 64 )
264 VyukovMPMCCycleQueue_dyn( size_t nCapacity )
265 : base_class( nCapacity )
268 cds::opt::none statistics() const
270 return cds::opt::none();
274 struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
276 typedef cds::atomicity::item_counter item_counter;
278 class VyukovMPMCCycleQueue_dyn_ic
279 : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
281 typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
283 VyukovMPMCCycleQueue_dyn_ic()
284 : base_class( 1024 * 64 )
286 VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
287 : base_class( nCapacity )
290 cds::opt::none statistics() const
292 return cds::opt::none();
298 struct traits_WeakRingBuffer_dyn: public cds::container::weak_ringbuffer::traits
300 typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
302 class WeakRingBuffer_dyn
303 : public cds::container::WeakRingBuffer< Value, traits_WeakRingBuffer_dyn >
305 typedef cds::container::WeakRingBuffer< Value, traits_WeakRingBuffer_dyn > base_class;
308 : base_class( 1024 * 64 )
310 WeakRingBuffer_dyn( size_t nCapacity )
311 : base_class( nCapacity )
314 cds::opt::none statistics() const
316 return cds::opt::none();
322 typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
323 typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
325 struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
327 typedef cds::opt::v::sequential_consistent mamory_model;
329 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_seqcst > BasketQueue_HP_seqcst;
330 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_seqcst > BasketQueue_DHP_seqcst;
332 struct traits_BasketQueue_ic : public cds::container::basket_queue::traits
334 typedef cds::atomicity::item_counter item_counter;
336 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_ic >BasketQueue_HP_ic;
337 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_ic >BasketQueue_DHP_ic;
339 struct traits_BasketQueue_stat : public cds::container::basket_queue::traits
341 typedef cds::container::basket_queue::stat<> stat;
343 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_stat > BasketQueue_HP_stat;
344 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_stat > BasketQueue_DHP_stat;
348 typedef cds::container::RWQueue< Value > RWQueue_Spin;
350 struct traits_RWQueue_Spin_ic : public cds::container::rwqueue::traits
352 typedef cds::atomicity::item_counter item_counter;
354 typedef cds::container::RWQueue< Value, traits_RWQueue_Spin_ic > RWQueue_Spin_ic;
356 struct traits_RWQueue_mutex : public
357 cds::container::rwqueue::make_traits<
358 cds::opt::lock_type< std::mutex >
361 typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
364 struct traits_FCQueue_stat:
365 public cds::container::fcqueue::make_traits<
366 cds::opt::stat< cds::container::fcqueue::stat<> >
369 struct traits_FCQueue_single_mutex_single_condvar:
370 public cds::container::fcqueue::make_traits<
371 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
374 struct traits_FCQueue_single_mutex_single_condvar_stat: traits_FCQueue_single_mutex_single_condvar
376 typedef cds::container::fcqueue::stat<> stat;
378 struct traits_FCQueue_single_mutex_multi_condvar:
379 public cds::container::fcqueue::make_traits<
380 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
383 struct traits_FCQueue_single_mutex_multi_condvar_stat: traits_FCQueue_single_mutex_multi_condvar
385 typedef cds::container::fcqueue::stat<> stat;
387 struct traits_FCQueue_multi_mutex_multi_condvar:
388 public cds::container::fcqueue::make_traits<
389 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
392 struct traits_FCQueue_multi_mutex_multi_condvar_stat: traits_FCQueue_multi_mutex_multi_condvar
394 typedef cds::container::fcqueue::stat<> stat;
396 struct traits_FCQueue_elimination:
397 public cds::container::fcqueue::make_traits<
398 cds::opt::enable_elimination< true >
401 struct traits_FCQueue_elimination_stat:
402 public cds::container::fcqueue::make_traits<
403 cds::opt::enable_elimination< true >
404 ,cds::opt::stat< cds::container::fcqueue::stat<> >
408 typedef cds::container::FCQueue< Value > FCQueue_deque;
409 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_stat > FCQueue_deque_stat;
410 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar> FCQueue_deque_wait_ss;
411 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_deque_wait_ss_stat;
412 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_deque_wait_sm;
413 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_deque_wait_sm_stat;
414 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_deque_wait_mm;
415 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_deque_wait_mm_stat;
417 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
418 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
420 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>> FCQueue_list;
421 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_stat> FCQueue_list_stat;
422 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar> FCQueue_list_wait_ss;
423 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_list_wait_ss_stat;
424 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_list_wait_sm;
425 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_list_wait_sm_stat;
426 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_list_wait_mm;
427 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_list_wait_mm_stat;
429 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
430 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
434 typedef details::FCDequeL< Value > FCDequeL_default;
435 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_mutex;
436 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_stat;
437 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_wait_ss;
438 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
439 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_wait_sm;
440 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
441 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_wait_mm;
442 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
443 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_elimination;
444 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
446 typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
447 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
448 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
449 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
451 typedef details::FCDequeR< Value > FCDequeR_default;
452 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_mutex;
453 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_stat;
454 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_wait_ss;
455 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
456 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_wait_sm;
457 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
458 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_wait_mm;
459 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
460 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_elimination;
461 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
463 typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
464 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
465 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
466 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
469 typedef StdQueue_deque<Value> StdQueue_deque_Spinlock;
470 typedef StdQueue_list<Value> StdQueue_list_Spinlock;
471 typedef StdQueue_deque<Value, std::mutex> StdQueue_deque_Mutex;
472 typedef StdQueue_list<Value, std::mutex> StdQueue_list_Mutex;
473 #ifdef UNIT_LOCK_WIN_CS
474 typedef StdQueue_deque<Value, lock::win::CS> StdQueue_deque_WinCS;
475 typedef StdQueue_list<Value, lock::win::CS> StdQueue_list_WinCS;
476 typedef StdQueue_deque<Value, lock::win::Mutex> StdQueue_deque_WinMutex;
477 typedef StdQueue_list<Value, lock::win::Mutex> StdQueue_list_WinMutex;
481 class traits_SegmentedQueue_spin_stat:
482 public cds::container::segmented_queue::make_traits<
483 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
486 class traits_SegmentedQueue_spin_padding:
487 public cds::container::segmented_queue::make_traits<
488 cds::opt::padding< cds::opt::cache_line_padding >
491 class traits_SegmentedQueue_mutex_stat:
492 public cds::container::segmented_queue::make_traits<
493 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
494 ,cds::opt::lock_type< std::mutex >
497 class traits_SegmentedQueue_mutex:
498 public cds::container::segmented_queue::make_traits<
499 cds::opt::lock_type< std::mutex >
502 class traits_SegmentedQueue_mutex_padding:
503 public cds::container::segmented_queue::make_traits<
504 cds::opt::lock_type< std::mutex >
505 , cds::opt::padding< cds::opt::cache_line_padding >
509 typedef cds::container::SegmentedQueue< cds::gc::HP, Value > SegmentedQueue_HP_spin;
510 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_padding > SegmentedQueue_HP_spin_padding;
511 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_stat > SegmentedQueue_HP_spin_stat;
512 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex > SegmentedQueue_HP_mutex;
513 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_padding > SegmentedQueue_HP_mutex_padding;
514 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_stat > SegmentedQueue_HP_mutex_stat;
516 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value > SegmentedQueue_DHP_spin;
517 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_padding > SegmentedQueue_DHP_spin_padding;
518 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_stat > SegmentedQueue_DHP_spin_stat;
519 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex > SegmentedQueue_DHP_mutex;
520 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding > SegmentedQueue_DHP_mutex_padding;
521 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat > SegmentedQueue_DHP_mutex_stat;
524 template <typename Value>
525 struct TypesFCHeavyValue {
526 typedef details::FCDequeL< Value > FCDequeL_HeavyValue_default;
527 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_HeavyValue_mutex;
528 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_HeavyValue_stat;
529 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_HeavyValue_wait_ss;
530 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_HeavyValue_wait_ss_stat;
531 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_HeavyValue_wait_sm;
532 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_HeavyValue_wait_sm_stat;
533 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_HeavyValue_wait_mm;
534 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_HeavyValue_wait_mm_stat;
535 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_HeavyValue_elimination;
536 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_HeavyValue_elimination_stat;
538 typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_HeavyValue_boost;
539 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_stat;
540 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination;
541 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination_stat;
543 typedef details::FCDequeR< Value > FCDequeR_HeavyValue_default;
544 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_HeavyValue_mutex;
545 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_HeavyValue_stat;
546 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_HeavyValue_wait_ss;
547 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_HeavyValue_wait_ss_stat;
548 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_HeavyValue_wait_sm;
549 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_HeavyValue_wait_sm_stat;
550 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_HeavyValue_wait_mm;
551 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_HeavyValue_wait_mm_stat;
552 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_HeavyValue_elimination;
553 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_HeavyValue_elimination_stat;
555 typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_HeavyValue_boost;
556 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_stat;
557 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination;
558 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination_stat;
563 // *********************************************
567 template <typename Counter>
568 static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::stat<Counter> const& s )
571 << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
572 << CDSSTRESS_STAT_OUT( s, m_nEnqMove )
573 << CDSSTRESS_STAT_OUT( s, m_nDequeue )
574 << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
575 << CDSSTRESS_STAT_OUT( s, m_nCollided )
576 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
579 static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
584 static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
589 static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
592 << CDSSTRESS_STAT_OUT( s, m_nPushFront )
593 << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
594 << CDSSTRESS_STAT_OUT( s, m_nPushBack )
595 << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
596 << CDSSTRESS_STAT_OUT( s, m_nPopFront )
597 << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
598 << CDSSTRESS_STAT_OUT( s, m_nPopBack )
599 << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
600 << CDSSTRESS_STAT_OUT( s, m_nCollided )
601 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
604 } // namespace cds_test
606 #define CDSSTRESS_Queue_F( test_fixture, type_name ) \
607 TEST_F( test_fixture, type_name ) \
609 typedef queue::Types< value_type >::type_name queue_type; \
614 #define CDSSTRESS_FCQueue_F( test_fixture, type_name ) \
615 TEST_F( test_fixture, type_name ) \
617 typedef queue::TypesFCHeavyValue< value_type >::type_name queue_type; \
622 #if defined(CDS_STRESS_TEST_LEVEL) && CDS_STRESS_TEST_LEVEL > 0
623 # define CDSSTRESS_MSQueue_1( test_fixture ) \
624 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst ) \
625 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic ) \
626 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst ) \
627 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic ) \
629 # define CDSSTRESS_MoirQueue_1( test_fixture ) \
630 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst ) \
631 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic ) \
632 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst ) \
633 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic ) \
635 # define CDSSTRESS_OptimsticQueue_1( test_fixture ) \
636 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst ) \
637 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic ) \
638 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst ) \
639 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic ) \
641 # define CDSSTRESS_BasketQueue_1( test_fixture ) \
642 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst ) \
643 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic ) \
644 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst ) \
645 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic ) \
647 # define CDSSTRESS_FCQueue_1( test_fixture ) \
648 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss ) \
649 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm ) \
650 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm ) \
651 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination ) \
652 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss ) \
653 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm ) \
654 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm ) \
655 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination ) \
657 # define CDSSTRESS_FCDeque_1( test_fixture ) \
658 CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex ) \
659 CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat ) \
660 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss )\
661 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm ) \
662 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm ) \
663 CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination ) \
664 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost ) \
665 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination ) \
666 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination_stat ) \
667 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss ) \
668 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm ) \
669 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm ) \
670 CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination ) \
671 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost ) \
672 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination ) \
673 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat ) \
675 # define CDSSTRESS_FCDeque_HeavyValue_1( test_fixture ) \
676 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss ) \
677 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss_stat ) \
678 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm ) \
679 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm_stat ) \
680 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm ) \
681 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm_stat ) \
682 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination ) \
683 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination_stat ) \
684 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost ) \
685 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_stat ) \
686 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination) \
687 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination_stat ) \
688 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_default ) \
689 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_mutex ) \
690 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_stat ) \
691 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss ) \
692 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss_stat ) \
693 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm ) \
694 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm_stat ) \
695 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm ) \
696 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm_stat ) \
697 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination ) \
698 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination_stat ) \
699 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost ) \
700 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_stat ) \
701 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination) \
702 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination_stat ) \
704 # define CDSSTRESS_RWQueue_1( test_fixture ) \
705 CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic ) \
707 # define CDSSTRESS_SegmentedQueue_1( test_fixture ) \
708 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_padding ) \
709 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding ) \
710 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_padding ) \
712 # define CDSSTRESS_StdQueue_1( test_fixture ) \
713 CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex ) \
714 CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex ) \
717 # define CDSSTRESS_MSQueue_1( test_fixture )
718 # define CDSSTRESS_MoirQueue_1( test_fixture )
719 # define CDSSTRESS_OptimsticQueue_1( test_fixture )
720 # define CDSSTRESS_BasketQueue_1( test_fixture )
721 # define CDSSTRESS_FCQueue_1( test_fixture )
722 # define CDSSTRESS_FCDeque_1( test_fixture )
723 # define CDSSTRESS_FCDeque_HeavyValue_1( test_fixture )
724 # define CDSSTRESS_RWQueue_1( test_fixture )
725 # define CDSSTRESS_SegmentedQueue_1( test_fixture )
726 # define CDSSTRESS_StdQueue_1( test_fixture )
729 #define CDSSTRESS_MSQueue( test_fixture ) \
730 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP ) \
731 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat ) \
732 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP ) \
733 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat ) \
734 CDSSTRESS_MSQueue_1( test_fixture )
736 #define CDSSTRESS_MoirQueue( test_fixture ) \
737 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP ) \
738 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat ) \
739 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP ) \
740 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat ) \
741 CDSSTRESS_MoirQueue_1( test_fixture )
743 #define CDSSTRESS_OptimsticQueue( test_fixture ) \
744 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP ) \
745 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat ) \
746 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP ) \
747 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat ) \
748 CDSSTRESS_OptimsticQueue_1( test_fixture )
750 #define CDSSTRESS_BasketQueue( test_fixture ) \
751 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP ) \
752 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat ) \
753 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP ) \
754 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat ) \
755 CDSSTRESS_BasketQueue_1( test_fixture )
757 #define CDSSTRESS_FCQueue( test_fixture ) \
758 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque ) \
759 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_stat ) \
760 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss_stat ) \
761 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm_stat ) \
762 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm_stat ) \
763 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat ) \
764 CDSSTRESS_Queue_F( test_fixture, FCQueue_list ) \
765 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_stat ) \
766 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss_stat ) \
767 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm_stat ) \
768 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm_stat ) \
769 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat ) \
770 CDSSTRESS_FCQueue_1( test_fixture )
773 #define CDSSTRESS_FCDeque( test_fixture ) \
774 CDSSTRESS_Queue_F( test_fixture, FCDequeL_default ) \
775 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat ) \
776 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat ) \
777 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm_stat ) \
778 CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat ) \
779 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_stat ) \
780 CDSSTRESS_Queue_F( test_fixture, FCDequeR_default ) \
781 CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex ) \
782 CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat ) \
783 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss_stat ) \
784 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm_stat ) \
785 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm_stat ) \
786 CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat ) \
787 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_stat ) \
788 CDSSTRESS_FCDeque_1( test_fixture )
790 #define CDSSTRESS_FCDeque_HeavyValue( test_fixture ) \
791 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default ) \
792 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_mutex ) \
793 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_stat ) \
794 CDSSTRESS_FCDeque_HeavyValue_1( test_fixture )
796 #define CDSSTRESS_RWQueue( test_fixture ) \
797 CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin ) \
798 CDSSTRESS_Queue_F( test_fixture, RWQueue_mutex ) \
799 CDSSTRESS_RWQueue_1( test_fixture )
801 #define CDSSTRESS_SegmentedQueue( test_fixture ) \
802 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin ) \
803 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_padding ) \
804 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_stat ) \
805 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex ) \
806 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_stat ) \
807 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin ) \
808 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_stat ) \
809 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex ) \
810 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_stat ) \
811 CDSSTRESS_SegmentedQueue_1( test_fixture )
813 #define CDSSTRESS_VyukovQueue( test_fixture ) \
814 CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn ) \
815 CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic )
817 #define CDSSTRESS_WeakRingBuffer( test_fixture ) \
818 CDSSTRESS_Queue_F( test_fixture, WeakRingBuffer_dyn )
820 #define CDSSTRESS_StdQueue( test_fixture ) \
821 CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock ) \
822 CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock ) \
823 CDSSTRESS_StdQueue_1( test_fixture ) \
825 #endif // #ifndef CDSSTRESS_QUEUE_TYPES_H