fixed adding file problem
[c11concurrency-benchmarks.git] / gdax-orderbook-hpp / demo / dependencies / libcds-2.3.2 / test / stress / stack / intrusive_stack_type.h
1 /*
2     This file is a part of libcds - Concurrent Data Structures library
3
4     (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
5
6     Source code repo: http://github.com/khizmax/libcds/
7     Download: http://sourceforge.net/projects/libcds/files/
8
9     Redistribution and use in source and binary forms, with or without
10     modification, are permitted provided that the following conditions are met:
11
12     * Redistributions of source code must retain the above copyright notice, this
13       list of conditions and the following disclaimer.
14
15     * Redistributions in binary form must reproduce the above copyright notice,
16       this list of conditions and the following disclaimer in the documentation
17       and/or other materials provided with the distribution.
18
19     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #ifndef CDSSTRESS_INTRUSIVE_STACK_TYPES_H
32 #define CDSSTRESS_INTRUSIVE_STACK_TYPES_H
33
34 #include <cds/intrusive/treiber_stack.h>
35 #include <cds/intrusive/fcstack.h>
36
37 #include <cds/gc/hp.h>
38 #include <cds/gc/dhp.h>
39
40 #include <mutex>
41 #include <cds/sync/spinlock.h>
42 #include <stack>
43 #include <list>
44 #include <vector>
45 #include <boost/intrusive/list.hpp>
46
47 #include <cds_test/stress_test.h>
48 #include <cds_test/stat_flat_combining_out.h>
49
50
51 namespace istack {
52
53     namespace details {
54
55         template < typename T, typename Stack, typename Lock>
56         class StdStack
57         {
58             Stack   m_Impl;
59             mutable Lock    m_Lock;
60             cds::intrusive::treiber_stack::empty_stat m_stat;
61
62             typedef std::unique_lock<Lock>  unique_lock;
63
64         public:
65             typedef T value_type;
66
67             bool push( T& v )
68             {
69                 unique_lock l( m_Lock );
70                 m_Impl.push( &v );
71                 return true;
72             }
73
74             T * pop()
75             {
76                 unique_lock l( m_Lock );
77                 if ( !m_Impl.empty()) {
78                      T * v = m_Impl.top();
79                     m_Impl.pop();
80                     return v;
81                 }
82                 return nullptr;
83             }
84
85             bool empty() const
86             {
87                 unique_lock l( m_Lock );
88                 return m_Impl.empty();
89             }
90
91             cds::intrusive::treiber_stack::empty_stat const& statistics() const
92             {
93                 return m_stat;
94             }
95         };
96     }
97
98     template <typename T>
99     struct Types {
100
101         template <class GC>
102         using base_hook = cds::intrusive::treiber_stack::base_hook < cds::opt::gc< GC > >;
103
104     // TreiberStack
105         typedef cds::intrusive::TreiberStack< cds::gc::HP, T > Treiber_HP;
106         struct traits_Treiber_DHP: public
107             cds::intrusive::treiber_stack::make_traits <
108                 cds::intrusive::opt::hook< base_hook<cds::gc::DHP> >
109             > ::type
110         {};
111         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_DHP >Treiber_DHP;
112
113         template <class GC> struct traits_Treiber_seqcst : public
114             cds::intrusive::treiber_stack::make_traits <
115                 cds::intrusive::opt::hook< base_hook<GC> >
116                 , cds::opt::memory_model<cds::opt::v::sequential_consistent>
117             > ::type
118         {};
119         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_seqcst<cds::gc::HP>  > Treiber_HP_seqcst;
120         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst<cds::gc::DHP> > Treiber_DHP_seqcst;
121
122         template <class GC> struct traits_Treiber_stat: public
123             cds::intrusive::treiber_stack::make_traits <
124                 cds::intrusive::opt::hook< base_hook<GC> >
125                 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
126             > ::type
127         {};
128         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_stat<cds::gc::HP>  > Treiber_HP_stat;
129         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat<cds::gc::DHP> > Treiber_DHP_stat;
130
131         template <class GC> struct traits_Treiber_yield: public
132             cds::intrusive::treiber_stack::make_traits <
133                 cds::intrusive::opt::hook< base_hook<GC> >
134                 , cds::opt::back_off<cds::backoff::yield>
135                 , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
136             > ::type
137         {};
138         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_yield<cds::gc::HP>  > Treiber_HP_yield;
139         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield<cds::gc::DHP> > Treiber_DHP_yield;
140
141         template <class GC> struct traits_Treiber_pause: public
142             cds::intrusive::treiber_stack::make_traits <
143                 cds::intrusive::opt::hook< base_hook<GC> >
144                 , cds::opt::back_off<cds::backoff::pause>
145             > ::type
146         {};
147         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_pause<cds::gc::HP>  > Treiber_HP_pause;
148         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause<cds::gc::DHP> > Treiber_DHP_pause;
149
150         template <class GC> struct traits_Treiber_exp: public
151             cds::intrusive::treiber_stack::make_traits <
152                 cds::intrusive::opt::hook< base_hook<GC> >
153                 ,cds::opt::back_off<
154                     cds::backoff::make_exponential_t< cds::backoff::pause,cds::backoff::yield >
155                 >
156             > ::type
157         {};
158         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Treiber_exp<cds::gc::HP>  > Treiber_HP_exp;
159         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp<cds::gc::DHP> > Treiber_DHP_exp;
160
161
162     // Elimination stack
163         template <class GC> struct traits_Elimination_on : public
164             cds::intrusive::treiber_stack::make_traits <
165                 cds::intrusive::opt::hook< base_hook<GC> >
166                 , cds::opt::enable_elimination<true>
167             > ::type
168         {};
169         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_on<cds::gc::HP>  > Elimination_HP;
170         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on<cds::gc::DHP> > Elimination_DHP;
171
172         template <class GC> struct traits_Elimination_seqcst : public
173             cds::intrusive::treiber_stack::make_traits <
174                 cds::intrusive::opt::hook< base_hook<GC> >
175                 , cds::opt::enable_elimination<true>
176                 , cds::opt::memory_model< cds::opt::v::sequential_consistent >
177             > ::type
178         {};
179         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_seqcst<cds::gc::HP>  > Elimination_HP_seqcst;
180         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst<cds::gc::DHP> > Elimination_DHP_seqcst;
181
182         template <class GC> struct traits_Elimination_2ms: public
183             cds::intrusive::treiber_stack::make_traits <
184                 cds::intrusive::opt::hook< base_hook<GC> >
185                 , cds::opt::enable_elimination<true>
186                 , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
187             > ::type
188         {};
189         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms<cds::gc::HP>  > Elimination_HP_2ms;
190         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms<cds::gc::DHP> > Elimination_DHP_2ms;
191
192         template <class GC> struct traits_Elimination_2ms_stat: public
193             cds::intrusive::treiber_stack::make_traits <
194                 cds::intrusive::opt::hook< base_hook<GC> >
195                 , cds::opt::enable_elimination<true>
196                 , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
197                 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
198             > ::type
199         {};
200         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_2ms_stat<cds::gc::HP>  > Elimination_HP_2ms_stat;
201         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat<cds::gc::DHP> > Elimination_DHP_2ms_stat;
202
203         template <class GC> struct traits_Elimination_5ms: public
204             cds::intrusive::treiber_stack::make_traits <
205                 cds::intrusive::opt::hook< base_hook<GC> >
206                 , cds::opt::enable_elimination<true>
207                 , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
208             > ::type
209         {};
210         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms<cds::gc::HP>  > Elimination_HP_5ms;
211         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms<cds::gc::DHP> > Elimination_DHP_5ms;
212
213         template <class GC> struct traits_Elimination_5ms_stat: public
214             cds::intrusive::treiber_stack::make_traits <
215                 cds::intrusive::opt::hook< base_hook<GC> >
216                 , cds::opt::enable_elimination<true>
217                 , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
218                 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
219             > ::type
220         {};
221         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_5ms_stat<cds::gc::HP>  > Elimination_HP_5ms_stat;
222         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat<cds::gc::DHP> > Elimination_DHP_5ms_stat;
223
224         template <class GC> struct traits_Elimination_10ms: public
225             cds::intrusive::treiber_stack::make_traits <
226                 cds::intrusive::opt::hook< base_hook<GC> >
227                 , cds::opt::enable_elimination<true>
228                 , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
229             > ::type
230         {};
231         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms<cds::gc::HP>  > Elimination_HP_10ms;
232         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms<cds::gc::DHP> > Elimination_DHP_10ms;
233
234         template <class GC> struct traits_Elimination_10ms_stat: public
235             cds::intrusive::treiber_stack::make_traits <
236                 cds::intrusive::opt::hook< base_hook<GC> >
237                 , cds::opt::enable_elimination<true>
238                 , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
239                 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
240             > ::type
241         {};
242         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_10ms_stat<cds::gc::HP>  > Elimination_HP_10ms_stat;
243         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat<cds::gc::DHP> > Elimination_DHP_10ms_stat;
244
245         template <class GC> struct traits_Elimination_dyn: public
246             cds::intrusive::treiber_stack::make_traits <
247                 cds::intrusive::opt::hook< base_hook<GC> >
248                 , cds::opt::enable_elimination<true>
249                 , cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer<int> >
250             > ::type
251         {};
252         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn<cds::gc::HP>  > Elimination_HP_dyn;
253         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn<cds::gc::DHP> > Elimination_DHP_dyn;
254
255         template <class GC> struct traits_Elimination_stat: public
256             cds::intrusive::treiber_stack::make_traits <
257                 cds::intrusive::opt::hook< base_hook<GC> >
258                 , cds::opt::enable_elimination<true>
259                 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
260             > ::type
261         {};
262         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_stat<cds::gc::HP>  > Elimination_HP_stat;
263         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat<cds::gc::DHP> > Elimination_DHP_stat;
264
265         template <class GC> struct traits_Elimination_dyn_stat: public
266             cds::intrusive::treiber_stack::make_traits <
267                 cds::intrusive::opt::hook< base_hook<GC> >
268                 , cds::opt::enable_elimination<true>
269                 , cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer<int> >
270                 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
271             > ::type
272         {};
273         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_dyn_stat<cds::gc::HP>  > Elimination_HP_dyn_stat;
274         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat<cds::gc::DHP> > Elimination_DHP_dyn_stat;
275
276         template <class GC> struct traits_Elimination_yield: public
277             cds::intrusive::treiber_stack::make_traits <
278                 cds::intrusive::opt::hook< base_hook<GC> >
279                 , cds::opt::enable_elimination<true>
280                 , cds::opt::back_off<cds::backoff::yield>
281                 , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
282             > ::type
283         {};
284         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_yield<cds::gc::HP>  > Elimination_HP_yield;
285         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield<cds::gc::DHP> > Elimination_DHP_yield;
286
287         template <class GC> struct traits_Elimination_pause: public
288             cds::intrusive::treiber_stack::make_traits <
289                 cds::intrusive::opt::hook< base_hook<GC> >
290                 , cds::opt::enable_elimination<true>
291                 , cds::opt::back_off<cds::backoff::pause>
292             > ::type
293         {};
294         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_pause<cds::gc::HP>  > Elimination_HP_pause;
295         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause<cds::gc::DHP> > Elimination_DHP_pause;
296
297         template <class GC> struct traits_Elimination_exp: public
298             cds::intrusive::treiber_stack::make_traits <
299                 cds::intrusive::opt::hook< base_hook<GC> >
300                 , cds::opt::enable_elimination<true>
301                 ,cds::opt::back_off<
302                     cds::backoff::make_exponential_t< cds::backoff::pause, cds::backoff::yield >
303                 >
304             > ::type
305         {};
306         typedef cds::intrusive::TreiberStack< cds::gc::HP,  T, traits_Elimination_exp<cds::gc::HP>  > Elimination_HP_exp;
307         typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp<cds::gc::DHP> > Elimination_DHP_exp;
308
309     // FCStack
310         typedef cds::intrusive::FCStack< T > FCStack_slist;
311
312         struct traits_FCStack_stat:
313             public cds::intrusive::fcstack::make_traits<
314                 cds::opt::stat< cds::intrusive::fcstack::stat<> >
315             >::type
316         {};
317         struct traits_FCStack_elimination:
318             public cds::intrusive::fcstack::make_traits<
319             cds::opt::enable_elimination< true >
320             >::type
321         {};
322         struct traits_FCStack_elimination_stat:
323             public cds::intrusive::fcstack::make_traits<
324                 cds::opt::stat< cds::intrusive::fcstack::stat<> >,
325                 cds::opt::enable_elimination< true >
326             >::type
327         {};
328
329         struct traits_FCStack_mutex_stat:
330             public cds::intrusive::fcstack::make_traits<
331                 cds::opt::stat< cds::intrusive::fcstack::stat<> >
332                 ,cds::opt::lock_type< std::mutex >
333             >::type
334         {};
335         struct traits_FCStack_mutex_elimination:
336             public cds::intrusive::fcstack::make_traits<
337                 cds::opt::enable_elimination< true >
338                 ,cds::opt::lock_type< std::mutex >
339             >::type
340         {};
341         struct traits_FCStack_mutex_elimination_stat:
342             public cds::intrusive::fcstack::make_traits<
343                 cds::opt::stat< cds::intrusive::fcstack::stat<> >
344                 ,cds::opt::enable_elimination< true >
345                 ,cds::opt::lock_type< std::mutex >
346             >::type
347         {};
348
349         typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_stat > FCStack_slist_stat;
350         typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination > FCStack_slist_elimination;
351         typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination_stat > FCStack_slist_elimination_stat;
352         typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_stat > FCStack_slist_mutex_stat;
353         typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination > FCStack_slist_mutex_elimination;
354         typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination_stat > FCStack_slist_mutex_elimination_stat;
355         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T > > FCStack_list;
356         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_stat > FCStack_list_stat;
357         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination > FCStack_list_elimination;
358         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
359         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_stat > FCStack_list_mutex_stat;
360         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination > FCStack_list_mutex_elimination;
361         typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination_stat > FCStack_list_mutex_elimination_stat;
362
363
364         // std::stack
365         typedef details::StdStack< T, std::stack< T* >, std::mutex >  StdStack_Deque_Mutex;
366         typedef details::StdStack< T, std::stack< T* >, cds::sync::spin > StdStack_Deque_Spin;
367         typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, std::mutex >  StdStack_Vector_Mutex;
368         typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, cds::sync::spin > StdStack_Vector_Spin;
369         typedef details::StdStack< T, std::stack< T*, std::list<T*> >, std::mutex >  StdStack_List_Mutex;
370         typedef details::StdStack< T, std::stack< T*, std::list<T*> >, cds::sync::spin > StdStack_List_Spin;
371
372     };
373 } // namespace istack
374
375 namespace cds_test {
376
377     static inline property_stream& operator <<( property_stream& o, cds::intrusive::treiber_stack::empty_stat const& )
378     {
379         return o;
380     }
381
382     static inline property_stream& operator <<( property_stream& o, cds::intrusive::treiber_stack::stat<> const& s )
383     {
384         return o
385             << CDSSTRESS_STAT_OUT( s, m_PushCount )
386             << CDSSTRESS_STAT_OUT( s, m_PopCount )
387             << CDSSTRESS_STAT_OUT( s, m_PushRace )
388             << CDSSTRESS_STAT_OUT( s, m_PopRace )
389             << CDSSTRESS_STAT_OUT( s, m_ActivePushCollision )
390             << CDSSTRESS_STAT_OUT( s, m_PassivePopCollision )
391             << CDSSTRESS_STAT_OUT( s, m_ActivePopCollision )
392             << CDSSTRESS_STAT_OUT( s, m_PassivePushCollision )
393             << CDSSTRESS_STAT_OUT( s, m_EliminationFailed );
394     }
395
396
397     static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcstack::empty_stat const& )
398     {
399         return o;
400     }
401
402     static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcstack::stat<> const& s )
403     {
404         return o
405             << CDSSTRESS_STAT_OUT( s, m_nPush )
406             << CDSSTRESS_STAT_OUT( s, m_nPop )
407             << CDSSTRESS_STAT_OUT( s, m_nFailedPop )
408             << CDSSTRESS_STAT_OUT( s, m_nCollided )
409             << static_cast< cds::algo::flat_combining::stat<> const&>( s );
410     }
411
412 } // namespace cds_test
413
414 #define CDSSTRESS_TreiberStack_HP( test_fixture ) \
415     CDSSTRESS_Stack_F( test_fixture, Treiber_HP        ) \
416     CDSSTRESS_Stack_F( test_fixture, Treiber_HP_seqcst ) \
417     CDSSTRESS_Stack_F( test_fixture, Treiber_HP_pause  ) \
418     CDSSTRESS_Stack_F( test_fixture, Treiber_HP_exp    ) \
419     CDSSTRESS_Stack_F( test_fixture, Treiber_HP_stat   ) \
420
421 #define CDSSTRESS_TreiberStack_DHP( test_fixture ) \
422     CDSSTRESS_Stack_F( test_fixture, Treiber_DHP       ) \
423     CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_pause ) \
424     CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_exp   ) \
425     CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_stat  )
426
427
428 #define CDSSTRESS_EliminationStack_HP( test_fixture ) \
429     CDSSTRESS_Stack_F( test_fixture, Elimination_HP ) \
430     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_2ms ) \
431     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_2ms_stat ) \
432     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_5ms ) \
433     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_5ms_stat ) \
434     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_10ms ) \
435     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_10ms_stat ) \
436     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_seqcst ) \
437     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_pause ) \
438     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_exp ) \
439     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_stat ) \
440     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_dyn ) \
441     CDSSTRESS_Stack_F( test_fixture, Elimination_HP_dyn_stat ) \
442
443
444 #define CDSSTRESS_EliminationStack_DHP( test_fixture ) \
445     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP ) \
446     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_seqcst ) \
447     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_2ms ) \
448     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_2ms_stat ) \
449     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_5ms ) \
450     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_5ms_stat ) \
451     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_10ms ) \
452     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_10ms_stat ) \
453     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_pause ) \
454     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_exp ) \
455     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_stat ) \
456     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_dyn ) \
457     CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_dyn_stat )
458
459 #define CDSSTRESS_FCStack_slist( test_fixture ) \
460     CDSSTRESS_Stack_F( test_fixture, FCStack_slist ) \
461     CDSSTRESS_Stack_F( test_fixture, FCStack_slist_stat ) \
462     CDSSTRESS_Stack_F( test_fixture, FCStack_slist_elimination ) \
463     CDSSTRESS_Stack_F( test_fixture, FCStack_slist_elimination_stat ) \
464     CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_stat ) \
465     CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_elimination ) \
466     CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_elimination_stat ) \
467
468 #define CDSSTRESS_FCStack_list( test_fixture ) \
469     CDSSTRESS_Stack_F( test_fixture, FCStack_list ) \
470     CDSSTRESS_Stack_F( test_fixture, FCStack_list_stat ) \
471     CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination ) \
472     CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination_stat ) \
473     CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_stat ) \
474     CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_elimination ) \
475     CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_elimination_stat )
476
477 #define CDSSTRESS_StdStack( test_fixture ) \
478     CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Mutex  ) \
479     CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Spin   ) \
480     CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Mutex ) \
481     CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Spin  ) \
482     CDSSTRESS_Stack_F( test_fixture, StdStack_List_Mutex   ) \
483     CDSSTRESS_Stack_F( test_fixture, StdStack_List_Spin    )
484
485 #endif // #ifndef CDSSTRESS_INTRUSIVE_STACK_TYPES_H