Added copyright and license
[libcds.git] / tests / test-hdr / queue / hdr_intrusive_msqueue.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 CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
32 #define CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
33
34 #include "cppunit/cppunit_proxy.h"
35 #include <cds/intrusive/details/base.h>
36
37 namespace queue {
38     namespace ci = cds::intrusive;
39     namespace co = cds::opt;
40
41     class IntrusiveQueueHeaderTest: public CppUnitMini::TestCase
42     {
43     public:
44
45         template <typename Base>
46         struct base_hook_item : public Base
47         {
48             int nVal;
49             int nDisposeCount;
50
51             base_hook_item()
52                 : nDisposeCount( 0 )
53             {}
54         };
55
56         template <typename Member>
57         struct member_hook_item
58         {
59             int nVal;
60             int nDisposeCount;
61             Member hMember;
62
63             member_hook_item()
64                 : nDisposeCount( 0 )
65             {}
66         };
67
68         struct faked_disposer
69         {
70             template <typename T>
71             void operator ()( T * p )
72             {
73                 ++p->nDisposeCount;
74             }
75         };
76
77
78         // Test for MSQueue and derivatives
79         template <class Queue>
80         void test()
81         {
82             typedef typename Queue::value_type value_type;
83             value_type v1, v2, v3;
84
85             {
86                 Queue q;
87                 CPPUNIT_ASSERT( q.empty() );
88
89                 v1.nVal = 1;
90                 v2.nVal = 2;
91                 v3.nVal = 3;
92                 CPPUNIT_ASSERT( q.push(v1));
93                 CPPUNIT_ASSERT( !q.empty() );
94                 CPPUNIT_ASSERT( q.push(v2));
95                 CPPUNIT_ASSERT( !q.empty() );
96                 CPPUNIT_ASSERT( q.push(v3));
97                 CPPUNIT_ASSERT( !q.empty() );
98
99                 CPPUNIT_CHECK( v1.nDisposeCount == 0 );
100                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
101                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
102
103                 value_type * pv;
104                 pv = q.pop();
105                 Queue::gc::scan();
106                 CPPUNIT_ASSERT( pv != nullptr );
107                 CPPUNIT_ASSERT( pv->nVal == 1 );
108                 CPPUNIT_ASSERT( !q.empty() );
109                 CPPUNIT_CHECK( v1.nDisposeCount == 0 );
110                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
111                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
112
113                 pv = q.pop();
114                 Queue::gc::scan();
115                 CPPUNIT_ASSERT( pv != nullptr );
116                 CPPUNIT_ASSERT( pv->nVal == 2 );
117                 CPPUNIT_ASSERT( !q.empty() );
118                 CPPUNIT_CHECK( v1.nDisposeCount == 1 );
119                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
120                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
121
122                 pv = q.pop();
123                 Queue::gc::scan();
124                 CPPUNIT_ASSERT( pv != nullptr );
125                 CPPUNIT_ASSERT( pv->nVal == 3 );
126                 CPPUNIT_ASSERT( q.empty() );
127                 CPPUNIT_CHECK( v1.nDisposeCount == 1 );
128                 CPPUNIT_CHECK( v2.nDisposeCount == 1 );
129                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
130
131                 pv = q.pop();
132                 CPPUNIT_ASSERT( pv == nullptr );
133                 CPPUNIT_CHECK( v1.nDisposeCount == 1 );
134                 CPPUNIT_CHECK( v2.nDisposeCount == 1 );
135                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
136             }
137
138             Queue::gc::scan();
139             CPPUNIT_CHECK( v1.nDisposeCount == 1 );
140             CPPUNIT_CHECK( v2.nDisposeCount == 1 );
141             CPPUNIT_CHECK( v3.nDisposeCount == 1 );
142         }
143
144         // Test for BasketQueue and derivatives
145         template <class Queue>
146         void test_basket()
147         {
148             typedef typename Queue::value_type value_type;
149             value_type v1, v2, v3, v4;
150
151             {
152                 Queue q;
153                 CPPUNIT_ASSERT( q.empty() );
154
155                 v1.nVal = 1;
156                 v2.nVal = 2;
157                 v3.nVal = 3;
158                 v4.nVal = 4;
159                 CPPUNIT_ASSERT( q.push(v1));
160                 CPPUNIT_ASSERT( !q.empty() );
161                 CPPUNIT_ASSERT( q.push(v2));
162                 CPPUNIT_ASSERT( !q.empty() );
163                 CPPUNIT_ASSERT( q.push(v3));
164                 CPPUNIT_ASSERT( !q.empty() );
165                 CPPUNIT_ASSERT( q.push(v4));
166                 CPPUNIT_ASSERT( !q.empty() );
167
168                 CPPUNIT_CHECK( v1.nDisposeCount == 0 );
169                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
170                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
171                 CPPUNIT_CHECK( v4.nDisposeCount == 0 );
172
173                 value_type * pv;
174                 pv = q.pop();
175                 Queue::gc::scan();
176                 CPPUNIT_ASSERT( pv != nullptr );
177                 CPPUNIT_ASSERT( pv->nVal == 1 );
178                 CPPUNIT_ASSERT( !q.empty() );
179                 CPPUNIT_CHECK( v1.nDisposeCount == 0 );
180                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
181                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
182                 CPPUNIT_CHECK( v4.nDisposeCount == 0 );
183
184                 pv = q.pop();
185                 Queue::gc::scan();
186                 CPPUNIT_ASSERT( pv != nullptr );
187                 CPPUNIT_ASSERT( pv->nVal == 2 );
188                 CPPUNIT_ASSERT( !q.empty() );
189                 CPPUNIT_CHECK( v1.nDisposeCount == 0 );
190                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
191                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
192                 CPPUNIT_CHECK( v4.nDisposeCount == 0 );
193
194                 pv = q.pop();
195                 Queue::gc::scan();
196                 CPPUNIT_ASSERT( pv != nullptr );
197                 CPPUNIT_ASSERT( pv->nVal == 3 );
198                 CPPUNIT_ASSERT( !q.empty() );
199                 CPPUNIT_CHECK( v1.nDisposeCount == 0 );
200                 CPPUNIT_CHECK( v2.nDisposeCount == 0 );
201                 CPPUNIT_CHECK( v3.nDisposeCount == 0 );
202                 CPPUNIT_CHECK( v4.nDisposeCount == 0 );
203
204                 pv = q.pop();
205                 Queue::gc::scan();
206                 CPPUNIT_ASSERT( pv != nullptr );
207                 CPPUNIT_ASSERT( pv->nVal == 4 );
208                 CPPUNIT_ASSERT( q.empty() );
209                 CPPUNIT_CHECK( v1.nDisposeCount == 1 );
210                 CPPUNIT_CHECK( v2.nDisposeCount == 1 );
211                 CPPUNIT_CHECK( v3.nDisposeCount == 1 );
212                 CPPUNIT_CHECK( v4.nDisposeCount == 0 );
213
214                 pv = q.pop();
215                 Queue::gc::scan();
216                 CPPUNIT_CHECK( pv == nullptr );
217                 CPPUNIT_CHECK( v1.nDisposeCount == 1 );
218                 CPPUNIT_CHECK( v2.nDisposeCount == 1 );
219                 CPPUNIT_CHECK( v3.nDisposeCount == 1 );
220                 CPPUNIT_CHECK( v4.nDisposeCount == 0 );
221             }
222
223             Queue::gc::scan();
224             CPPUNIT_CHECK( v1.nDisposeCount == 1 );
225             CPPUNIT_CHECK( v2.nDisposeCount == 1 );
226             CPPUNIT_CHECK( v3.nDisposeCount == 1 );
227             CPPUNIT_CHECK( v4.nDisposeCount == 1 );
228         }
229
230         // Test for a queue in what dequeued item should be manually disposed
231         template <class Queue>
232         void test2()
233         {
234             typedef typename Queue::value_type value_type;
235             value_type v1, v2, v3;
236             Queue q;
237             CPPUNIT_ASSERT( q.empty() );
238
239             v1.nVal = 1;
240             v2.nVal = 2;
241             v3.nVal = 3;
242             CPPUNIT_ASSERT( q.push(v1));
243             CPPUNIT_ASSERT( !q.empty() );
244             CPPUNIT_ASSERT( q.push(v2));
245             CPPUNIT_ASSERT( !q.empty() );
246             CPPUNIT_ASSERT( q.push(v3));
247             CPPUNIT_ASSERT( !q.empty() );
248
249             CPPUNIT_CHECK( v1.nDisposeCount == 0 );
250             CPPUNIT_CHECK( v2.nDisposeCount == 0 );
251             CPPUNIT_CHECK( v3.nDisposeCount == 0 );
252
253             value_type * pv;
254             pv = q.pop();
255             CPPUNIT_ASSERT( pv != nullptr );
256             CPPUNIT_ASSERT( pv->nVal == 1 );
257             CPPUNIT_ASSERT( !q.empty() );
258             CPPUNIT_CHECK( v1.nDisposeCount == 0 );
259             CPPUNIT_CHECK( v2.nDisposeCount == 0 );
260             CPPUNIT_CHECK( v3.nDisposeCount == 0 );
261
262             pv = q.pop();
263             CPPUNIT_ASSERT( pv != nullptr );
264             CPPUNIT_ASSERT( pv->nVal == 2 );
265             CPPUNIT_ASSERT( !q.empty() );
266             CPPUNIT_CHECK( v1.nDisposeCount == 0 );
267             CPPUNIT_CHECK( v2.nDisposeCount == 0 );
268             CPPUNIT_CHECK( v3.nDisposeCount == 0 );
269
270             pv = q.pop();
271             CPPUNIT_ASSERT( pv != nullptr );
272             CPPUNIT_ASSERT( pv->nVal == 3 );
273             CPPUNIT_ASSERT( q.empty() );
274             CPPUNIT_CHECK( v1.nDisposeCount == 0 );
275             CPPUNIT_CHECK( v2.nDisposeCount == 0 );
276             CPPUNIT_CHECK( v3.nDisposeCount == 0 );
277
278             pv = q.pop();
279             CPPUNIT_ASSERT( pv == nullptr );
280             CPPUNIT_CHECK( v1.nDisposeCount == 0 );
281             CPPUNIT_CHECK( v2.nDisposeCount == 0 );
282             CPPUNIT_CHECK( v3.nDisposeCount == 0 );
283
284             CPPUNIT_ASSERT( q.push(v1));
285             CPPUNIT_ASSERT( !q.empty() );
286             CPPUNIT_ASSERT( q.push(v2));
287             CPPUNIT_ASSERT( !q.empty() );
288             CPPUNIT_ASSERT( q.push(v3));
289             CPPUNIT_ASSERT( !q.empty() );
290
291             CPPUNIT_CHECK( v1.nDisposeCount == 0 );
292             CPPUNIT_CHECK( v2.nDisposeCount == 0 );
293             CPPUNIT_CHECK( v3.nDisposeCount == 0 );
294             q.clear();
295             CPPUNIT_CHECK( q.empty() );
296             CPPUNIT_CHECK( v1.nDisposeCount == 1 );
297             CPPUNIT_CHECK( v2.nDisposeCount == 1 );
298             CPPUNIT_CHECK( v3.nDisposeCount == 1 );
299         }
300
301
302         void test_MSQueue_HP_default();
303         void test_MSQueue_HP_default_ic();
304         void test_MSQueue_HP_default_stat();
305         void test_MSQueue_HP_base();
306         void test_MSQueue_HP_member();
307         void test_MSQueue_HP_base_ic();
308         void test_MSQueue_HP_member_ic();
309         void test_MSQueue_HP_base_stat();
310         void test_MSQueue_HP_member_stat();
311         void test_MSQueue_HP_base_align();
312         void test_MSQueue_HP_member_align();
313         void test_MSQueue_HP_base_noalign();
314         void test_MSQueue_HP_member_noalign();
315         void test_MSQueue_HP_base_cachealign();
316         void test_MSQueue_HP_member_cachealign();
317         void test_MSQueue_DHP_base();
318         void test_MSQueue_DHP_member();
319         void test_MSQueue_DHP_base_ic();
320         void test_MSQueue_DHP_member_ic();
321         void test_MSQueue_DHP_base_stat();
322         void test_MSQueue_DHP_member_stat();
323         void test_MSQueue_DHP_base_align();
324         void test_MSQueue_DHP_member_align();
325         void test_MSQueue_DHP_base_noalign();
326         void test_MSQueue_DHP_member_noalign();
327         void test_MSQueue_DHP_base_cachealign();
328         void test_MSQueue_DHP_member_cachealign();
329
330         void test_MoirQueue_HP_default();
331         void test_MoirQueue_HP_default_ic();
332         void test_MoirQueue_HP_default_stat();
333         void test_MoirQueue_HP_base();
334         void test_MoirQueue_HP_member();
335         void test_MoirQueue_HP_base_ic();
336         void test_MoirQueue_HP_member_ic();
337         void test_MoirQueue_HP_base_stat();
338         void test_MoirQueue_HP_member_stat();
339         void test_MoirQueue_HP_base_align();
340         void test_MoirQueue_HP_member_align();
341         void test_MoirQueue_HP_base_noalign();
342         void test_MoirQueue_HP_member_noalign();
343         void test_MoirQueue_HP_base_cachealign();
344         void test_MoirQueue_HP_member_cachealign();
345         void test_MoirQueue_DHP_base();
346         void test_MoirQueue_DHP_member();
347         void test_MoirQueue_DHP_base_ic();
348         void test_MoirQueue_DHP_member_ic();
349         void test_MoirQueue_DHP_base_stat();
350         void test_MoirQueue_DHP_member_stat();
351         void test_MoirQueue_DHP_base_align();
352         void test_MoirQueue_DHP_member_align();
353         void test_MoirQueue_DHP_base_noalign();
354         void test_MoirQueue_DHP_member_noalign();
355         void test_MoirQueue_DHP_base_cachealign();
356         void test_MoirQueue_DHP_member_cachealign();
357
358         void test_OptimisticQueue_HP_default();
359         void test_OptimisticQueue_HP_default_ic();
360         void test_OptimisticQueue_HP_default_stat();
361         void test_OptimisticQueue_HP_base();
362         void test_OptimisticQueue_HP_member();
363         void test_OptimisticQueue_HP_base_ic();
364         void test_OptimisticQueue_HP_member_ic();
365         void test_OptimisticQueue_HP_base_stat();
366         void test_OptimisticQueue_HP_member_stat();
367         void test_OptimisticQueue_HP_base_align();
368         void test_OptimisticQueue_HP_member_align();
369         void test_OptimisticQueue_HP_base_noalign();
370         void test_OptimisticQueue_HP_member_noalign();
371         void test_OptimisticQueue_HP_base_cachealign();
372         void test_OptimisticQueue_HP_member_cachealign();
373         void test_OptimisticQueue_DHP_base();
374         void test_OptimisticQueue_DHP_member();
375         void test_OptimisticQueue_DHP_base_ic();
376         void test_OptimisticQueue_DHP_member_ic();
377         void test_OptimisticQueue_DHP_base_stat();
378         void test_OptimisticQueue_DHP_member_stat();
379         void test_OptimisticQueue_DHP_base_align();
380         void test_OptimisticQueue_DHP_member_align();
381         void test_OptimisticQueue_DHP_base_noalign();
382         void test_OptimisticQueue_DHP_member_noalign();
383         void test_OptimisticQueue_DHP_base_cachealign();
384         void test_OptimisticQueue_DHP_member_cachealign();
385
386         void test_BasketQueue_HP_default();
387         void test_BasketQueue_HP_default_ic();
388         void test_BasketQueue_HP_default_stat();
389         void test_BasketQueue_HP_base();
390         void test_BasketQueue_HP_member();
391         void test_BasketQueue_HP_base_ic();
392         void test_BasketQueue_HP_member_ic();
393         void test_BasketQueue_HP_base_stat();
394         void test_BasketQueue_HP_member_stat();
395         void test_BasketQueue_HP_base_align();
396         void test_BasketQueue_HP_member_align();
397         void test_BasketQueue_HP_base_noalign();
398         void test_BasketQueue_HP_member_noalign();
399         void test_BasketQueue_HP_base_cachealign();
400         void test_BasketQueue_HP_member_cachealign();
401         void test_BasketQueue_DHP_base();
402         void test_BasketQueue_DHP_member();
403         void test_BasketQueue_DHP_base_ic();
404         void test_BasketQueue_DHP_member_ic();
405         void test_BasketQueue_DHP_base_stat();
406         void test_BasketQueue_DHP_member_stat();
407         void test_BasketQueue_DHP_base_align();
408         void test_BasketQueue_DHP_member_align();
409         void test_BasketQueue_DHP_base_noalign();
410         void test_BasketQueue_DHP_member_noalign();
411         void test_BasketQueue_DHP_base_cachealign();
412         void test_BasketQueue_DHP_member_cachealign();
413
414         void test_TsigasCycleQueue_static();
415         void test_TsigasCycleQueue_static_ic();
416         void test_TsigasCycleQueue_dyn();
417         void test_TsigasCycleQueue_dyn_ic();
418
419         void test_VyukovMPMCCycleQueue_static();
420         void test_VyukovMPMCCycleQueue_static_ic();
421         void test_VyukovMPMCCycleQueue_dyn();
422         void test_VyukovMPMCCycleQueue_dyn_ic();
423
424         CPPUNIT_TEST_SUITE(IntrusiveQueueHeaderTest)
425             CPPUNIT_TEST(test_MSQueue_HP_default)
426             CPPUNIT_TEST(test_MSQueue_HP_default_ic)
427             CPPUNIT_TEST(test_MSQueue_HP_default_stat)
428             CPPUNIT_TEST(test_MSQueue_HP_base)
429             CPPUNIT_TEST(test_MSQueue_HP_member)
430             CPPUNIT_TEST(test_MSQueue_HP_base_ic)
431             CPPUNIT_TEST(test_MSQueue_HP_member_ic)
432             CPPUNIT_TEST(test_MSQueue_HP_base_stat)
433             CPPUNIT_TEST(test_MSQueue_HP_member_stat)
434             CPPUNIT_TEST(test_MSQueue_HP_base_align)
435             CPPUNIT_TEST(test_MSQueue_HP_member_align)
436             CPPUNIT_TEST(test_MSQueue_HP_base_noalign)
437             CPPUNIT_TEST(test_MSQueue_HP_member_noalign)
438             CPPUNIT_TEST(test_MSQueue_HP_base_cachealign)
439             CPPUNIT_TEST(test_MSQueue_HP_member_cachealign)
440             CPPUNIT_TEST(test_MSQueue_DHP_base)
441             CPPUNIT_TEST(test_MSQueue_DHP_member)
442             CPPUNIT_TEST(test_MSQueue_DHP_base_ic)
443             CPPUNIT_TEST(test_MSQueue_DHP_member_ic)
444             CPPUNIT_TEST(test_MSQueue_DHP_base_stat)
445             CPPUNIT_TEST(test_MSQueue_DHP_member_stat)
446             CPPUNIT_TEST(test_MSQueue_DHP_base_align)
447             CPPUNIT_TEST(test_MSQueue_DHP_member_align)
448             CPPUNIT_TEST(test_MSQueue_DHP_base_noalign)
449             CPPUNIT_TEST(test_MSQueue_DHP_member_noalign)
450             CPPUNIT_TEST(test_MSQueue_DHP_base_cachealign)
451             CPPUNIT_TEST(test_MSQueue_DHP_member_cachealign)
452
453             CPPUNIT_TEST(test_MoirQueue_HP_default)
454             CPPUNIT_TEST(test_MoirQueue_HP_default_ic)
455             CPPUNIT_TEST(test_MoirQueue_HP_default_stat)
456             CPPUNIT_TEST(test_MoirQueue_HP_base)
457             CPPUNIT_TEST(test_MoirQueue_HP_member)
458             CPPUNIT_TEST(test_MoirQueue_HP_base_ic)
459             CPPUNIT_TEST(test_MoirQueue_HP_member_ic)
460             CPPUNIT_TEST(test_MoirQueue_HP_base_stat)
461             CPPUNIT_TEST(test_MoirQueue_HP_member_stat)
462             CPPUNIT_TEST(test_MoirQueue_HP_base_align)
463             CPPUNIT_TEST(test_MoirQueue_HP_member_align)
464             CPPUNIT_TEST(test_MoirQueue_HP_base_noalign)
465             CPPUNIT_TEST(test_MoirQueue_HP_member_noalign)
466             CPPUNIT_TEST(test_MoirQueue_HP_base_cachealign)
467             CPPUNIT_TEST(test_MoirQueue_HP_member_cachealign)
468             CPPUNIT_TEST(test_MoirQueue_DHP_base)
469             CPPUNIT_TEST(test_MoirQueue_DHP_member)
470             CPPUNIT_TEST(test_MoirQueue_DHP_base_ic)
471             CPPUNIT_TEST(test_MoirQueue_DHP_member_ic)
472             CPPUNIT_TEST(test_MoirQueue_DHP_base_stat)
473             CPPUNIT_TEST(test_MoirQueue_DHP_member_stat)
474             CPPUNIT_TEST(test_MoirQueue_DHP_base_align)
475             CPPUNIT_TEST(test_MoirQueue_DHP_member_align)
476             CPPUNIT_TEST(test_MoirQueue_DHP_base_noalign)
477             CPPUNIT_TEST(test_MoirQueue_DHP_member_noalign)
478             CPPUNIT_TEST(test_MoirQueue_DHP_base_cachealign)
479             CPPUNIT_TEST(test_MoirQueue_DHP_member_cachealign)
480
481             CPPUNIT_TEST(test_OptimisticQueue_HP_default)
482             CPPUNIT_TEST(test_OptimisticQueue_HP_default_ic)
483             CPPUNIT_TEST(test_OptimisticQueue_HP_default_stat)
484             CPPUNIT_TEST(test_OptimisticQueue_HP_base)
485             CPPUNIT_TEST(test_OptimisticQueue_HP_member)
486             CPPUNIT_TEST(test_OptimisticQueue_HP_base_ic)
487             CPPUNIT_TEST(test_OptimisticQueue_HP_member_ic)
488             CPPUNIT_TEST(test_OptimisticQueue_HP_base_stat)
489             CPPUNIT_TEST(test_OptimisticQueue_HP_member_stat)
490             CPPUNIT_TEST(test_OptimisticQueue_HP_base_align)
491             CPPUNIT_TEST(test_OptimisticQueue_HP_member_align)
492             CPPUNIT_TEST(test_OptimisticQueue_HP_base_noalign)
493             CPPUNIT_TEST(test_OptimisticQueue_HP_member_noalign)
494             CPPUNIT_TEST(test_OptimisticQueue_HP_base_cachealign)
495             CPPUNIT_TEST(test_OptimisticQueue_HP_member_cachealign)
496             CPPUNIT_TEST(test_OptimisticQueue_DHP_base)
497             CPPUNIT_TEST(test_OptimisticQueue_DHP_member)
498             CPPUNIT_TEST(test_OptimisticQueue_DHP_base_ic)
499             CPPUNIT_TEST(test_OptimisticQueue_DHP_member_ic)
500             CPPUNIT_TEST(test_OptimisticQueue_DHP_base_stat)
501             CPPUNIT_TEST(test_OptimisticQueue_DHP_member_stat)
502             CPPUNIT_TEST(test_OptimisticQueue_DHP_base_align)
503             CPPUNIT_TEST(test_OptimisticQueue_DHP_member_align)
504             CPPUNIT_TEST(test_OptimisticQueue_DHP_base_noalign)
505             CPPUNIT_TEST(test_OptimisticQueue_DHP_member_noalign)
506             CPPUNIT_TEST(test_OptimisticQueue_DHP_base_cachealign)
507             CPPUNIT_TEST(test_OptimisticQueue_DHP_member_cachealign)
508
509             CPPUNIT_TEST(test_BasketQueue_HP_default)
510             CPPUNIT_TEST(test_BasketQueue_HP_default_ic)
511             CPPUNIT_TEST(test_BasketQueue_HP_default_stat)
512             CPPUNIT_TEST(test_BasketQueue_HP_base)
513             CPPUNIT_TEST(test_BasketQueue_HP_member)
514             CPPUNIT_TEST(test_BasketQueue_HP_base_ic)
515             CPPUNIT_TEST(test_BasketQueue_HP_member_ic)
516             CPPUNIT_TEST(test_BasketQueue_HP_base_stat)
517             CPPUNIT_TEST(test_BasketQueue_HP_member_stat)
518             CPPUNIT_TEST(test_BasketQueue_HP_base_align)
519             CPPUNIT_TEST(test_BasketQueue_HP_member_align)
520             CPPUNIT_TEST(test_BasketQueue_HP_base_noalign)
521             CPPUNIT_TEST(test_BasketQueue_HP_member_noalign)
522             CPPUNIT_TEST(test_BasketQueue_HP_base_cachealign)
523             CPPUNIT_TEST(test_BasketQueue_HP_member_cachealign)
524             CPPUNIT_TEST(test_BasketQueue_DHP_base)
525             CPPUNIT_TEST(test_BasketQueue_DHP_member)
526             CPPUNIT_TEST(test_BasketQueue_DHP_base_ic)
527             CPPUNIT_TEST(test_BasketQueue_DHP_member_ic)
528             CPPUNIT_TEST(test_BasketQueue_DHP_base_stat)
529             CPPUNIT_TEST(test_BasketQueue_DHP_member_stat)
530             CPPUNIT_TEST(test_BasketQueue_DHP_base_align)
531             CPPUNIT_TEST(test_BasketQueue_DHP_member_align)
532             CPPUNIT_TEST(test_BasketQueue_DHP_base_noalign)
533             CPPUNIT_TEST(test_BasketQueue_DHP_member_noalign)
534             CPPUNIT_TEST(test_BasketQueue_DHP_base_cachealign)
535             CPPUNIT_TEST(test_BasketQueue_DHP_member_cachealign)
536
537             CPPUNIT_TEST(test_TsigasCycleQueue_static)
538             CPPUNIT_TEST(test_TsigasCycleQueue_static_ic)
539             CPPUNIT_TEST(test_TsigasCycleQueue_dyn)
540             CPPUNIT_TEST(test_TsigasCycleQueue_dyn_ic)
541
542             CPPUNIT_TEST(test_VyukovMPMCCycleQueue_static);
543             CPPUNIT_TEST(test_VyukovMPMCCycleQueue_static_ic);
544             CPPUNIT_TEST(test_VyukovMPMCCycleQueue_dyn);
545             CPPUNIT_TEST(test_VyukovMPMCCycleQueue_dyn_ic);
546
547         CPPUNIT_TEST_SUITE_END()
548     };
549 }   // namespace queue
550
551 #endif // #ifndef CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H