Replace cds::ref/boost::ref with std::ref, remove cds::unref and cds/ref.h header
[libcds.git] / tests / test-hdr / queue / hdr_intrusive_moirqueue_ptb.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_msqueue.h"
4 #include "hdr_intrusive_singlelink_node.h"
5 #include <cds/intrusive/moir_queue.h>
6 #include <cds/gc/ptb.h>
7
8 namespace queue {
9
10 #define TEST(X)     void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
11
12     namespace {
13
14         // PTB base hook
15         typedef ci::MoirQueue< cds::gc::PTB,
16             base_hook_item<cds::gc::PTB>
17             ,ci::opt::hook<
18                 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
19             >
20             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
21         > MoirQueue_PTB_base;
22
23         // PTB member hook
24         typedef ci::MoirQueue< cds::gc::PTB,
25             member_hook_item<cds::gc::PTB>
26             ,ci::opt::hook<
27                 ci::single_link::member_hook<
28                     offsetof(member_hook_item<cds::gc::PTB>, hMember),
29                     ci::opt::gc<cds::gc::PTB>
30                 >
31             >
32             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
33         > MoirQueue_PTB_member;
34
35         /// PTB base hook + item counter
36         typedef ci::MoirQueue< cds::gc::PTB,
37             base_hook_item<cds::gc::PTB>
38             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
39             ,ci::opt::hook<
40                 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
41             >
42             ,co::item_counter< cds::atomicity::item_counter >
43             ,co::memory_model< co::v::sequential_consistent >
44         > MoirQueue_PTB_base_ic;
45
46         // PTB member hook + item counter
47         typedef ci::MoirQueue< cds::gc::PTB,
48             member_hook_item<cds::gc::PTB>
49             ,ci::opt::hook<
50                 ci::single_link::member_hook<
51                     offsetof(member_hook_item<cds::gc::PTB>, hMember),
52                     ci::opt::gc<cds::gc::PTB>
53                 >
54             >
55             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
56             ,co::item_counter< cds::atomicity::item_counter >
57        > MoirQueue_PTB_member_ic;
58
59         // PTB base hook + stat
60         typedef ci::MoirQueue< cds::gc::PTB,
61             base_hook_item<cds::gc::PTB>
62             ,ci::opt::hook<
63                 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
64             >
65             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
66             ,co::stat< ci::queue_stat<> >
67         > MoirQueue_PTB_base_stat;
68
69         // PTB member hook + stat
70         typedef ci::MoirQueue< cds::gc::PTB,
71             member_hook_item<cds::gc::PTB>
72             ,ci::opt::hook<
73                 ci::single_link::member_hook<
74                     offsetof(member_hook_item<cds::gc::PTB>, hMember),
75                     ci::opt::gc<cds::gc::PTB>
76                 >
77             >
78             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
79             ,co::stat< ci::queue_stat<> >
80             ,co::memory_model< co::v::relaxed_ordering >
81         > MoirQueue_PTB_member_stat;
82
83         // PTB base hook + alignment
84         typedef ci::MoirQueue< cds::gc::PTB,
85             base_hook_item<cds::gc::PTB>
86             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
87             ,ci::opt::hook<
88                 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
89             >
90             ,co::alignment< 32 >
91         > MoirQueue_PTB_base_align;
92
93         // PTB member hook + alignment
94         typedef ci::MoirQueue< cds::gc::PTB,
95             member_hook_item<cds::gc::PTB>
96             ,ci::opt::hook<
97                 ci::single_link::member_hook<
98                     offsetof(member_hook_item<cds::gc::PTB>, hMember),
99                     ci::opt::gc<cds::gc::PTB>
100                 >
101             >
102             ,co::alignment< 32 >
103             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
104         > MoirQueue_PTB_member_align;
105
106         // PTB base hook + no alignment
107         typedef ci::MoirQueue< cds::gc::PTB,
108             base_hook_item<cds::gc::PTB>
109             ,ci::opt::hook<
110                 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
111             >
112             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
113             ,co::alignment< co::no_special_alignment >
114         > MoirQueue_PTB_base_noalign;
115
116         // PTB member hook + no alignment
117         typedef ci::MoirQueue< cds::gc::PTB,
118             member_hook_item<cds::gc::PTB>
119             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
120             ,ci::opt::hook<
121                 ci::single_link::member_hook<
122                     offsetof(member_hook_item<cds::gc::PTB>, hMember),
123                     ci::opt::gc<cds::gc::PTB>
124                 >
125             >
126             ,co::alignment< co::no_special_alignment >
127         > MoirQueue_PTB_member_noalign;
128
129
130         // PTB base hook + cache alignment
131         typedef ci::MoirQueue< cds::gc::PTB,
132             base_hook_item<cds::gc::PTB>
133             ,ci::opt::hook<
134                 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
135             >
136             ,co::alignment< co::cache_line_alignment >
137             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
138         > MoirQueue_PTB_base_cachealign;
139
140         // PTB member hook + cache alignment
141         typedef ci::MoirQueue< cds::gc::PTB,
142             member_hook_item<cds::gc::PTB>
143             ,ci::opt::hook<
144                 ci::single_link::member_hook<
145                     offsetof(member_hook_item<cds::gc::PTB>, hMember),
146                     ci::opt::gc<cds::gc::PTB>
147                 >
148             >
149             ,co::alignment< co::cache_line_alignment >
150             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
151         > MoirQueue_PTB_member_cachealign;
152
153     }   // namespace
154
155     TEST(MoirQueue_PTB_base)
156     TEST(MoirQueue_PTB_member)
157     TEST(MoirQueue_PTB_base_ic)
158     TEST(MoirQueue_PTB_member_ic)
159     TEST(MoirQueue_PTB_base_stat)
160     TEST(MoirQueue_PTB_member_stat)
161     TEST(MoirQueue_PTB_base_align)
162     TEST(MoirQueue_PTB_member_align)
163     TEST(MoirQueue_PTB_base_noalign)
164     TEST(MoirQueue_PTB_member_noalign)
165     TEST(MoirQueue_PTB_base_cachealign)
166     TEST(MoirQueue_PTB_member_cachealign)
167
168 } // namespace queue