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