Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / queue / hdr_intrusive_vyukovmpmc_cycle_queue.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
5
6 namespace queue {
7
8 #define TEST(X)     void IntrusiveQueueHeaderTest::test_##X() { test2<X>(); }
9
10     namespace {
11         struct item {
12             int nVal;
13             int nDisposeCount;
14
15             item()
16                 : nDisposeCount(0)
17             {}
18         };
19
20         typedef ci::VyukovMPMCCycleQueue<
21             item
22             ,co::buffer< co::v::static_buffer< int, 1024 > >
23             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
24             ,co::memory_model< co::v::sequential_consistent >
25         > VyukovMPMCCycleQueue_stat;
26
27         typedef ci::VyukovMPMCCycleQueue<
28             item
29             ,co::buffer< co::v::static_buffer< int, 1024 > >
30             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
31             ,co::item_counter< cds::atomicity::item_counter >
32             ,co::memory_model< co::v::relaxed_ordering >
33         > VyukovMPMCCycleQueue_stat_ic;
34
35         class VyukovMPMCCycleQueue_dyn
36             : public ci::VyukovMPMCCycleQueue<
37                 item
38                 ,co::buffer< co::v::dynamic_buffer< int > >
39                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
40             >
41         {
42             typedef ci::VyukovMPMCCycleQueue<
43                 item
44                 ,co::buffer< co::v::dynamic_buffer< int > >
45                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
46             > base_class;
47         public:
48             VyukovMPMCCycleQueue_dyn()
49                 : base_class( 1024 )
50             {}
51         };
52
53         class VyukovMPMCCycleQueue_dyn_ic
54             : public ci::VyukovMPMCCycleQueue<
55                 item
56                 ,co::buffer< co::v::dynamic_buffer< int > >
57                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
58                 ,co::item_counter< cds::atomicity::item_counter >
59             >
60         {
61             typedef ci::VyukovMPMCCycleQueue<
62                 item
63                 ,co::buffer< co::v::dynamic_buffer< int > >
64                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
65                 ,co::item_counter< cds::atomicity::item_counter >
66             > base_class;
67         public:
68             VyukovMPMCCycleQueue_dyn_ic()
69                 : base_class( 1024 )
70             {}
71         };
72     }
73
74     TEST(VyukovMPMCCycleQueue_stat)
75     TEST(VyukovMPMCCycleQueue_stat_ic)
76     TEST(VyukovMPMCCycleQueue_dyn)
77     TEST(VyukovMPMCCycleQueue_dyn_ic)
78
79 } // namespace queue