Improved value-parameterized test f intrusive stack
[libcds.git] / tests / unit / stack / intrusive_stack_defs.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 CDSUNIT_INTRUSIVE_STACK_DEFS_H
32 #define CDSUNIT_INTRUSIVE_STACK_DEFS_H
33
34 #define CDSUNIT_DECLARE_TreiberStack \
35     TEST_CASE( Treiber_HP, cds::intrusive::treiber_stack::node< cds::gc::HP >        ) \
36     TEST_CASE( Treiber_HP_seqcst, cds::intrusive::treiber_stack::node< cds::gc::HP > ) \
37     /*TEST_CASE( Treiber_HP_yield, cds::intrusive::treiber_stack::node< cds::gc::HP >  )*/ \
38     TEST_CASE( Treiber_HP_pause, cds::intrusive::treiber_stack::node< cds::gc::HP >  ) \
39     TEST_CASE( Treiber_HP_exp, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
40     TEST_CASE( Treiber_HP_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >   ) \
41     TEST_CASE( Treiber_DHP, cds::intrusive::treiber_stack::node< cds::gc::DHP >       ) \
42     /*TEST_CASE( Treiber_DHP_yield, cds::intrusive::treiber_stack::node< cds::gc::DHP > )*/ \
43     TEST_CASE( Treiber_DHP_pause, cds::intrusive::treiber_stack::node< cds::gc::DHP > ) \
44     TEST_CASE( Treiber_DHP_exp, cds::intrusive::treiber_stack::node< cds::gc::DHP >   ) \
45     TEST_CASE( Treiber_DHP_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >  )
46
47 #define CDSUNIT_TEST_TreiberStack \
48     CPPUNIT_TEST( Treiber_HP        ) \
49     CPPUNIT_TEST( Treiber_HP_seqcst ) \
50     /*CPPUNIT_TEST( Treiber_HP_yield  )*/ \
51     CPPUNIT_TEST( Treiber_HP_pause  ) \
52     CPPUNIT_TEST( Treiber_HP_exp    ) \
53     CPPUNIT_TEST( Treiber_HP_stat   ) \
54     CPPUNIT_TEST( Treiber_DHP       ) \
55     /*CPPUNIT_TEST( Treiber_DHP_yield )*/ \
56     CPPUNIT_TEST( Treiber_DHP_pause ) \
57     CPPUNIT_TEST( Treiber_DHP_exp   ) \
58     CPPUNIT_TEST( Treiber_DHP_stat  )
59
60 #define CDSUNIT_DECLARE_EliminationStack \
61     TEST_ELIMINATION( Elimination_HP, cds::intrusive::treiber_stack::node< cds::gc::HP >        ) \
62     TEST_ELIMINATION( Elimination_HP_2ms, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
63     TEST_ELIMINATION( Elimination_HP_2ms_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
64     TEST_ELIMINATION( Elimination_HP_5ms, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
65     TEST_ELIMINATION( Elimination_HP_5ms_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
66     TEST_ELIMINATION( Elimination_HP_10ms, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
67     TEST_ELIMINATION( Elimination_HP_10ms_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
68     TEST_ELIMINATION( Elimination_HP_seqcst, cds::intrusive::treiber_stack::node< cds::gc::HP > ) \
69     /*TEST_ELIMINATION( Elimination_HP_yield, cds::intrusive::treiber_stack::node< cds::gc::HP >  )*/ \
70     TEST_ELIMINATION( Elimination_HP_pause, cds::intrusive::treiber_stack::node< cds::gc::HP >  ) \
71     TEST_ELIMINATION( Elimination_HP_exp, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
72     TEST_ELIMINATION( Elimination_HP_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >   ) \
73     TEST_ELIMINATION( Elimination_HP_dyn, cds::intrusive::treiber_stack::node< cds::gc::HP >    ) \
74     TEST_ELIMINATION( Elimination_HP_dyn_stat, cds::intrusive::treiber_stack::node< cds::gc::HP >) \
75     TEST_ELIMINATION( Elimination_DHP, cds::intrusive::treiber_stack::node< cds::gc::DHP >       ) \
76     TEST_ELIMINATION( Elimination_DHP_2ms, cds::intrusive::treiber_stack::node< cds::gc::DHP >    ) \
77     TEST_ELIMINATION( Elimination_DHP_2ms_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >) \
78     TEST_ELIMINATION( Elimination_DHP_5ms, cds::intrusive::treiber_stack::node< cds::gc::DHP >    ) \
79     TEST_ELIMINATION( Elimination_DHP_5ms_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >) \
80     TEST_ELIMINATION( Elimination_DHP_10ms, cds::intrusive::treiber_stack::node< cds::gc::DHP >    ) \
81     TEST_ELIMINATION( Elimination_DHP_10ms_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >) \
82     TEST_ELIMINATION( Elimination_DHP_seqcst, cds::intrusive::treiber_stack::node< cds::gc::DHP > ) \
83     /*TEST_ELIMINATION( Elimination_DHP_yield, cds::intrusive::treiber_stack::node< cds::gc::DHP > )*/ \
84     TEST_ELIMINATION( Elimination_DHP_pause, cds::intrusive::treiber_stack::node< cds::gc::DHP > ) \
85     TEST_ELIMINATION( Elimination_DHP_exp, cds::intrusive::treiber_stack::node< cds::gc::DHP >   ) \
86     TEST_ELIMINATION( Elimination_DHP_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >  ) \
87     TEST_ELIMINATION( Elimination_DHP_dyn, cds::intrusive::treiber_stack::node< cds::gc::DHP >   ) \
88     TEST_ELIMINATION( Elimination_DHP_dyn_stat, cds::intrusive::treiber_stack::node< cds::gc::DHP >)
89
90 #define CDSUNIT_TEST_EliminationStack \
91     CPPUNIT_TEST( Elimination_HP        ) \
92     CPPUNIT_TEST( Elimination_HP_2ms    ) \
93     CPPUNIT_TEST( Elimination_HP_2ms_stat) \
94     CPPUNIT_TEST( Elimination_HP_5ms    ) \
95     CPPUNIT_TEST( Elimination_HP_5ms_stat) \
96     CPPUNIT_TEST( Elimination_HP_10ms    ) \
97     CPPUNIT_TEST( Elimination_HP_10ms_stat) \
98     CPPUNIT_TEST( Elimination_HP_seqcst ) \
99     /*CPPUNIT_TEST( Elimination_HP_yield  )*/ \
100     CPPUNIT_TEST( Elimination_HP_pause  ) \
101     CPPUNIT_TEST( Elimination_HP_exp    ) \
102     CPPUNIT_TEST( Elimination_HP_stat   ) \
103     CPPUNIT_TEST( Elimination_HP_dyn    ) \
104     CPPUNIT_TEST( Elimination_HP_dyn_stat) \
105     CPPUNIT_TEST( Elimination_DHP        ) \
106     CPPUNIT_TEST( Elimination_DHP_seqcst ) \
107     CPPUNIT_TEST( Elimination_DHP_2ms    ) \
108     CPPUNIT_TEST( Elimination_DHP_2ms_stat) \
109     CPPUNIT_TEST( Elimination_DHP_5ms    ) \
110     CPPUNIT_TEST( Elimination_DHP_5ms_stat) \
111     CPPUNIT_TEST( Elimination_DHP_10ms    ) \
112     CPPUNIT_TEST( Elimination_DHP_10ms_stat) \
113     /*CPPUNIT_TEST( Elimination_DHP_yield )*/ \
114     CPPUNIT_TEST( Elimination_DHP_pause ) \
115     CPPUNIT_TEST( Elimination_DHP_exp   ) \
116     CPPUNIT_TEST( Elimination_DHP_stat  ) \
117     CPPUNIT_TEST( Elimination_DHP_dyn   ) \
118     CPPUNIT_TEST( Elimination_DHP_dyn_stat)
119
120 #define CDSUNIT_DECLARE_FCStack \
121     TEST_FCSTACK( FCStack_slist, boost::intrusive::slist_base_hook<> ) \
122     TEST_FCSTACK( FCStack_slist_stat, boost::intrusive::slist_base_hook<> ) \
123     TEST_FCSTACK( FCStack_slist_elimination, boost::intrusive::slist_base_hook<> ) \
124     TEST_FCSTACK( FCStack_slist_elimination_stat, boost::intrusive::slist_base_hook<> ) \
125     TEST_FCSTACK( FCStack_slist_mutex_stat, boost::intrusive::slist_base_hook<> ) \
126     TEST_FCSTACK( FCStack_slist_mutex_elimination, boost::intrusive::slist_base_hook<> ) \
127     TEST_FCSTACK( FCStack_slist_mutex_elimination_stat, boost::intrusive::slist_base_hook<> ) \
128     TEST_FCSTACK( FCStack_list, boost::intrusive::list_base_hook<> ) \
129     TEST_FCSTACK( FCStack_list_stat, boost::intrusive::list_base_hook<> ) \
130     TEST_FCSTACK( FCStack_list_elimination, boost::intrusive::list_base_hook<> ) \
131     TEST_FCSTACK( FCStack_list_elimination_stat, boost::intrusive::list_base_hook<> ) \
132     TEST_FCSTACK( FCStack_list_mutex_stat, boost::intrusive::list_base_hook<> ) \
133     TEST_FCSTACK( FCStack_list_mutex_elimination, boost::intrusive::list_base_hook<> ) \
134     TEST_FCSTACK( FCStack_list_mutex_elimination_stat, boost::intrusive::list_base_hook<> )
135
136 #define CDSUNIT_TEST_FCStack \
137     CPPUNIT_TEST( FCStack_slist ) \
138     CPPUNIT_TEST( FCStack_slist_stat ) \
139     CPPUNIT_TEST( FCStack_slist_elimination ) \
140     CPPUNIT_TEST( FCStack_slist_elimination_stat ) \
141     CPPUNIT_TEST( FCStack_slist_mutex_stat ) \
142     CPPUNIT_TEST( FCStack_slist_mutex_elimination ) \
143     CPPUNIT_TEST( FCStack_slist_mutex_elimination_stat ) \
144     CPPUNIT_TEST( FCStack_list ) \
145     CPPUNIT_TEST( FCStack_list_stat ) \
146     CPPUNIT_TEST( FCStack_list_elimination ) \
147     CPPUNIT_TEST( FCStack_list_elimination_stat ) \
148     CPPUNIT_TEST( FCStack_list_mutex_stat ) \
149     CPPUNIT_TEST( FCStack_list_mutex_elimination ) \
150     CPPUNIT_TEST( FCStack_list_mutex_elimination_stat )
151
152
153 #define CDSUNIT_DECLARE_StdStack \
154     TEST_STDSTACK( StdStack_Deque_Mutex  ) \
155     TEST_STDSTACK( StdStack_Deque_Spin   ) \
156     TEST_STDSTACK( StdStack_Vector_Mutex ) \
157     TEST_STDSTACK( StdStack_Vector_Spin  ) \
158     TEST_STDSTACK( StdStack_List_Mutex   ) \
159     TEST_STDSTACK( StdStack_List_Spin    )
160
161 #define CDSUNIT_TEST_StdStack \
162     CPPUNIT_TEST( StdStack_Deque_Mutex  ) \
163     CPPUNIT_TEST( StdStack_Deque_Spin   ) \
164     CPPUNIT_TEST( StdStack_Vector_Mutex ) \
165     CPPUNIT_TEST( StdStack_Vector_Spin  ) \
166     CPPUNIT_TEST( StdStack_List_Mutex   ) \
167     CPPUNIT_TEST( StdStack_List_Spin    )
168
169 #endif // #ifndef CDSUNIT_INTRUSIVE_STACK_DEFS_H