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_STACK_TYPES_H
32 #define CDSSTRESS_STACK_TYPES_H
34 #include <cds/container/treiber_stack.h>
35 #include <cds/container/fcstack.h>
36 #include <cds/container/fcdeque.h>
38 #include <cds/gc/hp.h>
39 #include <cds/gc/dhp.h>
42 #include <cds/sync/spinlock.h>
47 #include <cds_test/stress_test.h>
48 #include <cds_test/stat_flat_combining_out.h>
54 template <typename T, typename Traits=cds::container::fcdeque::traits>
55 class FCDequeL: public cds::container::FCDeque<T, std::deque<T>, Traits >
57 typedef cds::container::FCDeque<T, std::deque<T>, Traits > base_class;
63 unsigned int nCompactFactor ///< Flat combining: publication list compacting factor
64 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
66 : base_class( nCompactFactor, nCombinePassCount )
69 bool push( T const& v )
71 return base_class::push_front( v );
76 return base_class::pop_front( v );
80 template <typename T, typename Traits=cds::container::fcdeque::traits>
81 class FCDequeR: public cds::container::FCDeque<T, std::deque<T>, Traits >
83 typedef cds::container::FCDeque<T, std::deque<T>, Traits > base_class;
89 unsigned int nCompactFactor ///< Flat combining: publication list compacting factor
90 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
92 : base_class( nCompactFactor, nCombinePassCount )
95 bool push( T const& v )
97 return base_class::push_back( v );
102 return base_class::pop_back( v );
106 template < typename T, typename Stack, typename Lock>
111 cds::container::treiber_stack::empty_stat m_stat;
113 typedef std::unique_lock<Lock> unique_lock;
116 bool push( T const& v )
118 unique_lock l( m_Lock );
125 unique_lock l( m_Lock );
126 if ( !m_Impl.empty()) {
136 unique_lock l( m_Lock );
137 return m_Impl.empty();
140 cds::container::treiber_stack::empty_stat const& statistics() const
147 template <typename T>
151 typedef cds::container::TreiberStack< cds::gc::HP, T > Treiber_HP;
152 typedef cds::container::TreiberStack< cds::gc::DHP, T > Treiber_DHP;
154 struct traits_Treiber_seqcst: public
155 cds::container::treiber_stack::make_traits<
156 cds::opt::memory_model<cds::opt::v::sequential_consistent>
159 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_seqcst > Treiber_HP_seqcst;
160 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst > Treiber_DHP_seqcst;
162 struct traits_Treiber_stat: public
163 cds::container::treiber_stack::make_traits<
164 cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
167 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_stat > Treiber_HP_stat;
168 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat > Treiber_DHP_stat;
170 struct traits_Treiber_yield: public
171 cds::container::treiber_stack::make_traits<
172 cds::opt::back_off<cds::backoff::yield>
173 , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
176 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_yield > Treiber_HP_yield;
177 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield > Treiber_DHP_yield;
179 struct traits_Treiber_pause: public
180 cds::container::treiber_stack::make_traits<
181 cds::opt::back_off<cds::backoff::pause>
184 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_pause > Treiber_HP_pause;
185 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause > Treiber_DHP_pause;
187 struct traits_Treiber_exp: public
188 cds::container::treiber_stack::make_traits<
190 cds::backoff::make_exponential_t<cds::backoff::pause, cds::backoff::yield >
194 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Treiber_exp > Treiber_HP_exp;
195 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp > Treiber_DHP_exp;
199 struct traits_Elimination_on : public
200 cds::container::treiber_stack::make_traits <
201 cds::opt::enable_elimination<true>
204 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_on > Elimination_HP;
205 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_on > Elimination_DHP;
207 struct traits_Elimination_stat : public
208 cds::container::treiber_stack::make_traits <
209 cds::opt::enable_elimination<true>
210 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
213 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_stat > Elimination_HP_stat;
214 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat > Elimination_DHP_stat;
216 struct traits_Elimination_2ms: public
217 cds::container::treiber_stack::make_traits <
218 cds::opt::enable_elimination<true>
219 ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
222 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms > Elimination_HP_2ms;
223 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms > Elimination_DHP_2ms;
225 struct traits_Elimination_2ms_stat : public
226 cds::container::treiber_stack::make_traits <
227 cds::opt::enable_elimination<true>
228 , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
229 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
232 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms_stat > Elimination_HP_2ms_stat;
233 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat > Elimination_DHP_2ms_stat;
235 struct traits_Elimination_5ms : public
236 cds::container::treiber_stack::make_traits <
237 cds::opt::enable_elimination<true>
238 , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
241 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms > Elimination_HP_5ms;
242 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms > Elimination_DHP_5ms;
244 struct traits_Elimination_5ms_stat : public
245 cds::container::treiber_stack::make_traits <
246 cds::opt::enable_elimination<true>
247 , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
248 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
251 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms_stat > Elimination_HP_5ms_stat;
252 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat > Elimination_DHP_5ms_stat;
254 struct traits_Elimination_10ms : public
255 cds::container::treiber_stack::make_traits <
256 cds::opt::enable_elimination<true>
257 , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
260 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms > Elimination_HP_10ms;
261 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms > Elimination_DHP_10ms;
263 struct traits_Elimination_10ms_stat : public
264 cds::container::treiber_stack::make_traits <
265 cds::opt::enable_elimination<true>
266 , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
267 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
270 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms_stat > Elimination_HP_10ms_stat;
271 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat > Elimination_DHP_10ms_stat;
273 struct traits_Elimination_dyn: public
274 cds::container::treiber_stack::make_traits <
275 cds::opt::enable_elimination<true>
276 , cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer<int> >
279 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn > Elimination_HP_dyn;
280 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn > Elimination_DHP_dyn;
282 struct traits_Elimination_seqcst: public
283 cds::container::treiber_stack::make_traits <
284 cds::opt::enable_elimination<true>
285 , cds::opt::memory_model<cds::opt::v::sequential_consistent>
288 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_seqcst > Elimination_HP_seqcst;
289 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst > Elimination_DHP_seqcst;
291 struct traits_Elimination_dyn_stat: public
292 cds::container::treiber_stack::make_traits <
293 cds::opt::enable_elimination<true>
294 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
295 , cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer<int> >
298 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn_stat > Elimination_HP_dyn_stat;
299 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat > Elimination_DHP_dyn_stat;
301 struct traits_Elimination_yield: public
302 cds::container::treiber_stack::make_traits <
303 cds::opt::enable_elimination<true>
304 , cds::opt::back_off<cds::backoff::yield>
305 , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
308 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_yield > Elimination_HP_yield;
309 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield > Elimination_DHP_yield;
311 struct traits_Elimination_pause: public
312 cds::container::treiber_stack::make_traits <
313 cds::opt::enable_elimination<true>
314 , cds::opt::back_off<cds::backoff::pause>
317 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_pause > Elimination_HP_pause;
318 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause > Elimination_DHP_pause;
320 struct traits_Elimination_exp: public
321 cds::container::treiber_stack::make_traits <
322 cds::opt::enable_elimination<true>
324 cds::backoff::make_exponential_t< cds::backoff::pause, cds::backoff::yield >
328 typedef cds::container::TreiberStack< cds::gc::HP, T, traits_Elimination_exp > Elimination_HP_exp;
329 typedef cds::container::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp > Elimination_DHP_exp;
333 typedef cds::container::FCStack< T > FCStack_deque;
335 struct traits_FCStack_stat:
336 public cds::container::fcstack::make_traits<
337 cds::opt::stat< cds::container::fcstack::stat<> >
340 struct traits_FCStack_elimination:
341 public cds::container::fcstack::make_traits<
342 cds::opt::enable_elimination< true >
345 struct traits_FCStack_elimination_stat:
346 public cds::container::fcstack::make_traits<
347 cds::opt::stat< cds::container::fcstack::stat<> >,
348 cds::opt::enable_elimination< true >
351 struct traits_FCStack_mutex:
352 public cds::container::fcstack::make_traits<
353 cds::opt::lock_type< std::mutex >
357 typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_mutex > FCStack_deque_mutex;
358 typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_stat > FCStack_deque_stat;
359 typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_elimination > FCStack_deque_elimination;
360 typedef cds::container::FCStack< T, std::stack<T, std::deque<T> >, traits_FCStack_elimination_stat > FCStack_deque_elimination_stat;
361 typedef cds::container::FCStack< T, std::stack<T, std::vector<T> > > FCStack_vector;
362 typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_mutex > FCStack_vector_mutex;
363 typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_stat > FCStack_vector_stat;
364 typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_elimination > FCStack_vector_elimination;
365 typedef cds::container::FCStack< T, std::stack<T, std::vector<T> >, traits_FCStack_elimination_stat > FCStack_vector_elimination_stat;
366 typedef cds::container::FCStack< T, std::stack<T, std::list<T> > > FCStack_list;
367 typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_mutex > FCStack_list_mutex;
368 typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_stat > FCStack_list_stat;
369 typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_elimination > FCStack_list_elimination;
370 typedef cds::container::FCStack< T, std::stack<T, std::list<T> >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
373 struct traits_FCDeque_stat:
374 public cds::container::fcdeque::make_traits<
375 cds::opt::stat< cds::container::fcdeque::stat<> >
378 struct traits_FCDeque_elimination:
379 public cds::container::fcdeque::make_traits<
380 cds::opt::enable_elimination< true >
383 struct traits_FCDeque_elimination_stat:
384 public cds::container::fcdeque::make_traits<
385 cds::opt::stat< cds::container::fcdeque::stat<> >,
386 cds::opt::enable_elimination< true >
389 struct traits_FCDeque_mutex:
390 public cds::container::fcdeque::make_traits<
391 cds::opt::lock_type< std::mutex >
396 typedef details::FCDequeL< T > FCDequeL_default;
397 typedef details::FCDequeL< T, traits_FCDeque_mutex > FCDequeL_mutex;
398 typedef details::FCDequeL< T, traits_FCDeque_stat > FCDequeL_stat;
399 typedef details::FCDequeL< T, traits_FCDeque_elimination > FCDequeL_elimination;
400 typedef details::FCDequeL< T, traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
402 typedef details::FCDequeR< T > FCDequeR_default;
403 typedef details::FCDequeR< T, traits_FCDeque_mutex > FCDequeR_mutex;
404 typedef details::FCDequeR< T, traits_FCDeque_stat > FCDequeR_stat;
405 typedef details::FCDequeR< T, traits_FCDeque_elimination > FCDequeR_elimination;
406 typedef details::FCDequeR< T, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
410 typedef details::StdStack< T, std::stack< T >, std::mutex > StdStack_Deque_Mutex;
411 typedef details::StdStack< T, std::stack< T >, cds::sync::spin > StdStack_Deque_Spin;
412 typedef details::StdStack< T, std::stack< T, std::vector<T> >, std::mutex > StdStack_Vector_Mutex;
413 typedef details::StdStack< T, std::stack< T, std::vector<T> >, cds::sync::spin > StdStack_Vector_Spin;
414 typedef details::StdStack< T, std::stack< T, std::list<T> >, std::mutex > StdStack_List_Mutex;
415 typedef details::StdStack< T, std::stack< T, std::list<T> >, cds::sync::spin > StdStack_List_Spin;
421 static inline property_stream& operator <<( property_stream& o, cds::container::treiber_stack::empty_stat const& )
426 static inline property_stream& operator <<( property_stream& o, cds::container::treiber_stack::stat<> const& s )
429 << CDSSTRESS_STAT_OUT( s, m_PushCount )
430 << CDSSTRESS_STAT_OUT( s, m_PopCount )
431 << CDSSTRESS_STAT_OUT( s, m_PushRace )
432 << CDSSTRESS_STAT_OUT( s, m_PopRace )
433 << CDSSTRESS_STAT_OUT( s, m_ActivePushCollision )
434 << CDSSTRESS_STAT_OUT( s, m_PassivePopCollision )
435 << CDSSTRESS_STAT_OUT( s, m_ActivePopCollision )
436 << CDSSTRESS_STAT_OUT( s, m_PassivePushCollision )
437 << CDSSTRESS_STAT_OUT( s, m_EliminationFailed );
440 static inline property_stream& operator <<( property_stream& o, cds::container::fcstack::empty_stat const& /*s*/ )
445 static inline property_stream& operator <<( property_stream& o, cds::container::fcstack::stat<> const& s )
448 << CDSSTRESS_STAT_OUT( s, m_nPush )
449 << CDSSTRESS_STAT_OUT( s, m_nPushMove )
450 << CDSSTRESS_STAT_OUT( s, m_nPop )
451 << CDSSTRESS_STAT_OUT( s, m_nFailedPop )
452 << CDSSTRESS_STAT_OUT( s, m_nCollided )
453 << static_cast<cds::algo::flat_combining::stat<> const&>( s );
456 static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
461 static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
464 << CDSSTRESS_STAT_OUT( s, m_nPushFront )
465 << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
466 << CDSSTRESS_STAT_OUT( s, m_nPushBack )
467 << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
468 << CDSSTRESS_STAT_OUT( s, m_nPopFront )
469 << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
470 << CDSSTRESS_STAT_OUT( s, m_nPopBack )
471 << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
472 << CDSSTRESS_STAT_OUT( s, m_nCollided )
473 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
475 } // namespace cds_test
477 #define CDSSTRESS_Stack_F( test_fixture, type_name ) \
478 TEST_F( test_fixture, type_name ) \
480 typedef stack::Types< value_type >::type_name stack_type; \
485 #define CDSSTRESS_EliminationStack_F( test_fixture, type_name ) \
486 TEST_F( test_fixture, type_name ) \
488 typedef stack::Types< value_type >::type_name stack_type; \
489 stack_type stack( s_nEliminationSize ); \
490 test_elimination( stack ); \
493 #define CDSSTRESS_TreiberStack( test_fixture ) \
494 CDSSTRESS_Stack_F( test_fixture, Treiber_HP ) \
495 CDSSTRESS_Stack_F( test_fixture, Treiber_HP_pause ) \
496 CDSSTRESS_Stack_F( test_fixture, Treiber_HP_exp ) \
497 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP ) \
498 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_pause ) \
499 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_exp )
501 #define CDSSTRESS_EliminationStack( test_fixture ) \
502 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP ) \
503 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_2ms ) \
504 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_5ms ) \
505 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_10ms ) \
506 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_pause ) \
507 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_exp ) \
508 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_HP_dyn ) \
509 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP ) \
510 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_2ms ) \
511 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_5ms ) \
512 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_10ms ) \
513 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_pause ) \
514 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_exp ) \
515 CDSSTRESS_EliminationStack_F( test_fixture, Elimination_DHP_dyn )
517 #define CDSSTRESS_FCStack( test_fixture ) \
518 CDSSTRESS_Stack_F( test_fixture, FCStack_deque ) \
519 CDSSTRESS_Stack_F( test_fixture, FCStack_deque_mutex ) \
520 CDSSTRESS_Stack_F( test_fixture, FCStack_deque_elimination ) \
521 CDSSTRESS_Stack_F( test_fixture, FCStack_vector ) \
522 CDSSTRESS_Stack_F( test_fixture, FCStack_vector_mutex ) \
523 CDSSTRESS_Stack_F( test_fixture, FCStack_vector_elimination ) \
524 CDSSTRESS_Stack_F( test_fixture, FCStack_list ) \
525 CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex ) \
526 CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination )
528 #define CDSSTRESS_FCDeque( test_fixture ) \
529 CDSSTRESS_Stack_F( test_fixture, FCDequeL_default ) \
530 CDSSTRESS_Stack_F( test_fixture, FCDequeL_mutex ) \
531 CDSSTRESS_Stack_F( test_fixture, FCDequeL_elimination ) \
532 CDSSTRESS_Stack_F( test_fixture, FCDequeR_default ) \
533 CDSSTRESS_Stack_F( test_fixture, FCDequeR_mutex ) \
534 CDSSTRESS_Stack_F( test_fixture, FCDequeR_elimination )
536 #define CDSSTRESS_StdStack( test_fixture ) \
537 CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Mutex ) \
538 CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Spin ) \
539 CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Mutex ) \
540 CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Spin ) \
541 CDSSTRESS_Stack_F( test_fixture, StdStack_List_Mutex ) \
542 CDSSTRESS_Stack_F( test_fixture, StdStack_List_Spin )
545 #endif // #ifndef CDSSTRESS_STACK_TYPES_H