Added copyright and license
[libcds.git] / tests / unit / queue / queue_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_QUEUE_DEFS_H
32 #define CDSUNIT_QUEUE_DEFS_H
33
34 // MoirQueue
35 #define CDSUNIT_DECLARE_MoirQueue( ITEM_TYPE ) \
36     TEST_CASE( MoirQueue_HP, ITEM_TYPE ) \
37     TEST_CASE( MoirQueue_HP_michaelAlloc, ITEM_TYPE ) \
38     TEST_CASE( MoirQueue_HP_seqcst, ITEM_TYPE ) \
39     TEST_CASE( MoirQueue_HP_ic, ITEM_TYPE ) \
40     TEST_CASE( MoirQueue_HP_stat, ITEM_TYPE ) \
41     TEST_CASE( MoirQueue_DHP, ITEM_TYPE ) \
42     TEST_CASE( MoirQueue_DHP_michaelAlloc, ITEM_TYPE ) \
43     TEST_CASE( MoirQueue_DHP_seqcst, ITEM_TYPE ) \
44     TEST_CASE( MoirQueue_DHP_ic, ITEM_TYPE ) \
45     TEST_CASE( MoirQueue_DHP_stat, ITEM_TYPE )
46
47 #define CDSUNIT_TEST_MoirQueue \
48     CPPUNIT_TEST(MoirQueue_HP) \
49     CPPUNIT_TEST(MoirQueue_HP_michaelAlloc) \
50     CPPUNIT_TEST(MoirQueue_HP_seqcst) \
51     CPPUNIT_TEST(MoirQueue_HP_ic) \
52     CPPUNIT_TEST(MoirQueue_HP_stat) \
53     CPPUNIT_TEST(MoirQueue_DHP) \
54     CPPUNIT_TEST(MoirQueue_DHP_michaelAlloc) \
55     CPPUNIT_TEST(MoirQueue_DHP_seqcst) \
56     CPPUNIT_TEST(MoirQueue_DHP_ic) \
57     CPPUNIT_TEST(MoirQueue_DHP_stat)
58
59 // MSQueue
60 #define CDSUNIT_DECLARE_MSQueue( ITEM_TYPE ) \
61     TEST_CASE( MSQueue_HP, ITEM_TYPE  ) \
62     TEST_CASE( MSQueue_HP_michaelAlloc, ITEM_TYPE  ) \
63     TEST_CASE( MSQueue_HP_seqcst, ITEM_TYPE  ) \
64     TEST_CASE( MSQueue_HP_ic, ITEM_TYPE  ) \
65     TEST_CASE( MSQueue_HP_stat, ITEM_TYPE  ) \
66     TEST_CASE( MSQueue_DHP, ITEM_TYPE ) \
67     TEST_CASE( MSQueue_DHP_michaelAlloc, ITEM_TYPE ) \
68     TEST_CASE( MSQueue_DHP_seqcst, ITEM_TYPE ) \
69     TEST_CASE( MSQueue_DHP_ic, ITEM_TYPE ) \
70     TEST_CASE( MSQueue_DHP_stat, ITEM_TYPE )
71
72 #define CDSUNIT_TEST_MSQueue \
73     CPPUNIT_TEST(MSQueue_HP) \
74     CPPUNIT_TEST(MSQueue_HP_michaelAlloc) \
75     CPPUNIT_TEST(MSQueue_HP_seqcst) \
76     CPPUNIT_TEST(MSQueue_HP_ic) \
77     CPPUNIT_TEST(MSQueue_HP_stat) \
78     CPPUNIT_TEST(MSQueue_DHP) \
79     CPPUNIT_TEST(MSQueue_DHP_michaelAlloc) \
80     CPPUNIT_TEST(MSQueue_DHP_seqcst) \
81     CPPUNIT_TEST(MSQueue_DHP_ic) \
82     CPPUNIT_TEST(MSQueue_DHP_stat)
83
84
85 // OptimisticQueue
86 #define CDSUNIT_DECLARE_OptimisticQueue( ITEM_TYPE ) \
87     TEST_CASE(OptimisticQueue_HP, ITEM_TYPE ) \
88     TEST_CASE(OptimisticQueue_HP_michaelAlloc, ITEM_TYPE ) \
89     TEST_CASE(OptimisticQueue_HP_seqcst, ITEM_TYPE ) \
90     TEST_CASE(OptimisticQueue_HP_ic, ITEM_TYPE ) \
91     TEST_CASE(OptimisticQueue_HP_stat, ITEM_TYPE ) \
92     TEST_CASE(OptimisticQueue_DHP, ITEM_TYPE ) \
93     TEST_CASE(OptimisticQueue_DHP_michaelAlloc, ITEM_TYPE ) \
94     TEST_CASE(OptimisticQueue_DHP_seqcst, ITEM_TYPE ) \
95     TEST_CASE(OptimisticQueue_DHP_ic, ITEM_TYPE ) \
96     TEST_CASE(OptimisticQueue_DHP_stat, ITEM_TYPE )
97
98 #define CDSUNIT_TEST_OptimisticQueue \
99     CPPUNIT_TEST(OptimisticQueue_HP) \
100     CPPUNIT_TEST(OptimisticQueue_HP_michaelAlloc) \
101     CPPUNIT_TEST(OptimisticQueue_HP_seqcst) \
102     CPPUNIT_TEST(OptimisticQueue_HP_ic) \
103     CPPUNIT_TEST(OptimisticQueue_HP_stat) \
104     CPPUNIT_TEST(OptimisticQueue_DHP) \
105     CPPUNIT_TEST(OptimisticQueue_DHP_michaelAlloc) \
106     CPPUNIT_TEST(OptimisticQueue_DHP_seqcst) \
107     CPPUNIT_TEST(OptimisticQueue_DHP_ic) \
108     CPPUNIT_TEST(OptimisticQueue_DHP_stat)
109
110
111 // BasketQueue
112 #define CDSUNIT_DECLARE_BasketQueue( ITEM_TYPE ) \
113     TEST_CASE( BasketQueue_HP, ITEM_TYPE  ) \
114     TEST_CASE( BasketQueue_HP_michaelAlloc, ITEM_TYPE ) \
115     TEST_CASE( BasketQueue_HP_seqcst, ITEM_TYPE  ) \
116     TEST_CASE( BasketQueue_HP_ic, ITEM_TYPE  ) \
117     TEST_CASE( BasketQueue_HP_stat, ITEM_TYPE  ) \
118     TEST_CASE( BasketQueue_DHP, ITEM_TYPE ) \
119     TEST_CASE( BasketQueue_DHP_michaelAlloc, ITEM_TYPE ) \
120     TEST_CASE( BasketQueue_DHP_seqcst, ITEM_TYPE ) \
121     TEST_CASE( BasketQueue_DHP_ic, ITEM_TYPE ) \
122     TEST_CASE( BasketQueue_DHP_stat, ITEM_TYPE )
123
124 #define CDSUNIT_TEST_BasketQueue \
125     CPPUNIT_TEST(BasketQueue_HP) \
126     CPPUNIT_TEST(BasketQueue_HP_michaelAlloc) \
127     CPPUNIT_TEST(BasketQueue_HP_seqcst) \
128     CPPUNIT_TEST(BasketQueue_HP_ic) \
129     CPPUNIT_TEST(BasketQueue_HP_stat) \
130     CPPUNIT_TEST(BasketQueue_DHP) \
131     CPPUNIT_TEST(BasketQueue_DHP_michaelAlloc) \
132     CPPUNIT_TEST(BasketQueue_DHP_seqcst) \
133     CPPUNIT_TEST(BasketQueue_DHP_ic) \
134     CPPUNIT_TEST(BasketQueue_DHP_stat)
135
136
137 // FCQueue
138 #define CDSUNIT_DECLARE_FCQueue( ITEM_TYPE ) \
139     TEST_CASE( FCQueue_deque, ITEM_TYPE ) \
140     TEST_CASE( FCQueue_deque_elimination, ITEM_TYPE ) \
141     TEST_CASE( FCQueue_deque_elimination_stat, ITEM_TYPE ) \
142     TEST_CASE( FCQueue_list, ITEM_TYPE ) \
143     TEST_CASE( FCQueue_list_elimination, ITEM_TYPE ) \
144     TEST_CASE( FCQueue_list_elimination_stat, ITEM_TYPE )
145
146 #define CDSUNIT_TEST_FCQueue \
147     CPPUNIT_TEST( FCQueue_deque) \
148     CPPUNIT_TEST( FCQueue_deque_elimination) \
149     CPPUNIT_TEST( FCQueue_deque_elimination_stat) \
150     CPPUNIT_TEST( FCQueue_list) \
151     CPPUNIT_TEST( FCQueue_list_elimination) \
152     CPPUNIT_TEST( FCQueue_list_elimination_stat)
153
154
155 // FCDeque
156 #define CDSUNIT_DECLARE_FCDeque( ITEM_TYPE ) \
157     TEST_CASE( FCDequeL_default, ITEM_TYPE ) \
158     TEST_CASE( FCDequeL_mutex, ITEM_TYPE ) \
159     TEST_CASE( FCDequeL_stat, ITEM_TYPE ) \
160     TEST_CASE( FCDequeL_elimination, ITEM_TYPE ) \
161     TEST_CASE( FCDequeL_elimination_stat, ITEM_TYPE ) \
162     TEST_CASE( FCDequeL_boost, ITEM_TYPE ) \
163     TEST_CASE( FCDequeL_boost_stat, ITEM_TYPE ) \
164     TEST_CASE( FCDequeL_boost_elimination, ITEM_TYPE ) \
165     TEST_CASE( FCDequeL_boost_elimination_stat, ITEM_TYPE ) \
166     TEST_CASE( FCDequeR_default, ITEM_TYPE ) \
167     TEST_CASE( FCDequeR_mutex, ITEM_TYPE ) \
168     TEST_CASE( FCDequeR_stat, ITEM_TYPE ) \
169     TEST_CASE( FCDequeR_elimination, ITEM_TYPE ) \
170     TEST_CASE( FCDequeR_elimination_stat, ITEM_TYPE ) \
171     TEST_CASE( FCDequeR_boost, ITEM_TYPE ) \
172     TEST_CASE( FCDequeR_boost_stat, ITEM_TYPE ) \
173     TEST_CASE( FCDequeR_boost_elimination, ITEM_TYPE ) \
174     TEST_CASE( FCDequeR_boost_elimination_stat, ITEM_TYPE )
175
176 #define CDSUNIT_TEST_FCDeque \
177     CPPUNIT_TEST( FCDequeL_default ) \
178     CPPUNIT_TEST( FCDequeL_mutex ) \
179     CPPUNIT_TEST( FCDequeL_stat ) \
180     CPPUNIT_TEST( FCDequeL_elimination ) \
181     CPPUNIT_TEST( FCDequeL_elimination_stat ) \
182     CPPUNIT_TEST( FCDequeL_boost ) \
183     CPPUNIT_TEST( FCDequeL_boost_stat ) \
184     CPPUNIT_TEST( FCDequeL_boost_elimination ) \
185     CPPUNIT_TEST( FCDequeL_boost_elimination_stat ) \
186     CPPUNIT_TEST( FCDequeR_default ) \
187     CPPUNIT_TEST( FCDequeR_mutex ) \
188     CPPUNIT_TEST( FCDequeR_stat ) \
189     CPPUNIT_TEST( FCDequeR_elimination ) \
190     CPPUNIT_TEST( FCDequeR_elimination_stat ) \
191     CPPUNIT_TEST( FCDequeR_boost ) \
192     CPPUNIT_TEST( FCDequeR_boost_stat ) \
193     CPPUNIT_TEST( FCDequeR_boost_elimination ) \
194     CPPUNIT_TEST( FCDequeR_boost_elimination_stat )
195
196
197 // RWQueue
198 #define CDSUNIT_DECLARE_RWQueue( ITEM_TYPE ) \
199     TEST_CASE( RWQueue_Spin, ITEM_TYPE ) \
200     TEST_CASE( RWQueue_Spin_ic, ITEM_TYPE ) \
201     TEST_CASE( RWQueue_mutex, ITEM_TYPE )
202
203 #define CDSUNIT_TEST_RWQueue \
204     CPPUNIT_TEST(RWQueue_Spin) \
205     CPPUNIT_TEST(RWQueue_Spin_ic) \
206     CPPUNIT_TEST(RWQueue_mutex)
207
208 // TsigasCycleQueue
209 #define CDSUNIT_DECLARE_TsigasCycleQueue( ITEM_TYPE ) \
210     TEST_BOUNDED(TsigasCycleQueue_dyn, ITEM_TYPE) \
211     TEST_BOUNDED(TsigasCycleQueue_dyn_michaelAlloc, ITEM_TYPE) \
212     TEST_BOUNDED(TsigasCycleQueue_dyn_ic, ITEM_TYPE)
213
214 #define CDSUNIT_TEST_TsigasCycleQueue \
215     CPPUNIT_TEST(TsigasCycleQueue_dyn) \
216     CPPUNIT_TEST(TsigasCycleQueue_dyn_michaelAlloc) \
217     CPPUNIT_TEST(TsigasCycleQueue_dyn_ic)
218
219
220 // VyukovMPMCCycleQueue
221 #define CDSUNIT_DECLARE_VyukovMPMCCycleQueue( ITEM_TYPE ) \
222     TEST_BOUNDED(VyukovMPMCCycleQueue_dyn, ITEM_TYPE) \
223     TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_michaelAlloc, ITEM_TYPE) \
224     TEST_BOUNDED(VyukovMPMCCycleQueue_dyn_ic, ITEM_TYPE) \
225
226
227 #define CDSUNIT_TEST_VyukovMPMCCycleQueue \
228     CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn) \
229     CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_michaelAlloc) \
230     CPPUNIT_TEST(VyukovMPMCCycleQueue_dyn_ic) \
231
232 // SegmentedQueue
233 #define CDSUNIT_DECLARE_SegmentedQueue( ITEM_TYPE ) \
234     TEST_SEGMENTED( SegmentedQueue_HP_spin, ITEM_TYPE ) \
235     TEST_SEGMENTED( SegmentedQueue_HP_spin_padding, ITEM_TYPE ) \
236     TEST_SEGMENTED( SegmentedQueue_HP_spin_stat, ITEM_TYPE ) \
237     TEST_SEGMENTED( SegmentedQueue_HP_mutex, ITEM_TYPE ) \
238     TEST_SEGMENTED( SegmentedQueue_HP_mutex_padding, ITEM_TYPE ) \
239     TEST_SEGMENTED( SegmentedQueue_HP_mutex_stat, ITEM_TYPE ) \
240     TEST_SEGMENTED( SegmentedQueue_DHP_spin, ITEM_TYPE ) \
241     TEST_SEGMENTED( SegmentedQueue_DHP_spin_padding, ITEM_TYPE ) \
242     TEST_SEGMENTED( SegmentedQueue_DHP_spin_stat, ITEM_TYPE ) \
243     TEST_SEGMENTED( SegmentedQueue_DHP_mutex, ITEM_TYPE ) \
244     TEST_SEGMENTED( SegmentedQueue_DHP_mutex_padding, ITEM_TYPE ) \
245     TEST_SEGMENTED( SegmentedQueue_DHP_mutex_stat, ITEM_TYPE )
246
247 #define CDSUNIT_TEST_SegmentedQueue \
248     CPPUNIT_TEST( SegmentedQueue_HP_spin ) \
249     CPPUNIT_TEST( SegmentedQueue_HP_spin_padding ) \
250     CPPUNIT_TEST( SegmentedQueue_HP_spin_stat ) \
251     CPPUNIT_TEST( SegmentedQueue_HP_mutex ) \
252     CPPUNIT_TEST( SegmentedQueue_HP_mutex_padding ) \
253     CPPUNIT_TEST( SegmentedQueue_HP_mutex_stat ) \
254     CPPUNIT_TEST( SegmentedQueue_DHP_spin ) \
255     CPPUNIT_TEST( SegmentedQueue_DHP_spin_padding ) \
256     CPPUNIT_TEST( SegmentedQueue_DHP_spin_stat ) \
257     CPPUNIT_TEST( SegmentedQueue_DHP_mutex ) \
258     CPPUNIT_TEST( SegmentedQueue_DHP_mutex_padding ) \
259     CPPUNIT_TEST( SegmentedQueue_DHP_mutex_stat )
260
261 // std::queue
262 #define CDSUNIT_DECLARE_StdQueue( ITEM_TYPE ) \
263     TEST_CASE( StdQueue_deque_Spinlock, ITEM_TYPE ) \
264     TEST_CASE( StdQueue_list_Spinlock, ITEM_TYPE ) \
265     TEST_CASE( StdQueue_deque_BoostMutex, ITEM_TYPE ) \
266     TEST_CASE( StdQueue_list_BoostMutex, ITEM_TYPE )
267
268 #define CDSUNIT_TEST_StdQueue \
269     CPPUNIT_TEST(StdQueue_deque_Spinlock) \
270     CPPUNIT_TEST(StdQueue_list_Spinlock) \
271     CPPUNIT_TEST(StdQueue_deque_BoostMutex) \
272     CPPUNIT_TEST(StdQueue_list_BoostMutex)
273
274
275 #endif // #ifndef CDSUNIT_QUEUE_DEFS_H