897e38307dfd9f58f2755e20ee0bb32f049dcf65
[libcds.git] / tests / test-hdr / queue / hdr_intrusive_moirqueue_hp.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/hp.h>
7
8 namespace queue {
9
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
11
12     namespace {
13         typedef ci::MoirQueue< cds::gc::HP,
14             base_hook_item<cds::gc::HP>
15             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
16         > MoirQueue_HP_default;
17
18         /// cds::gc::HP + item counter
19         typedef ci::MoirQueue< cds::gc::HP,
20             base_hook_item<cds::gc::HP>
21             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
22             ,co::item_counter< cds::atomicity::item_counter >
23         > MoirQueue_HP_default_ic;
24
25         /// cds::gc::HP + stat
26         typedef ci::MoirQueue< cds::gc::HP,
27             base_hook_item<cds::gc::HP>
28             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
29             ,co::stat< ci::queue_stat<> >
30         > MoirQueue_HP_default_stat;
31
32         // cds::gc::HP base hook
33         typedef ci::MoirQueue< cds::gc::HP,
34             base_hook_item<cds::gc::HP>
35             ,ci::opt::hook<
36                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
37             >
38             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
39         > MoirQueue_HP_base;
40
41         // cds::gc::HP member hook
42         typedef ci::MoirQueue< cds::gc::HP,
43             member_hook_item<cds::gc::HP>
44             ,ci::opt::hook<
45                 ci::single_link::member_hook<
46                     offsetof(member_hook_item<cds::gc::HP>, hMember),
47                     ci::opt::gc<cds::gc::HP>
48                 >
49             >
50             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
51         > MoirQueue_HP_member;
52
53         /// cds::gc::HP base hook + item counter
54         typedef ci::MoirQueue< cds::gc::HP,
55             base_hook_item<cds::gc::HP>
56             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
57             ,ci::opt::hook<
58                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
59             >
60             ,co::item_counter< cds::atomicity::item_counter >
61         > MoirQueue_HP_base_ic;
62
63         // cds::gc::HP member hook + item counter
64         typedef ci::MoirQueue< cds::gc::HP,
65             member_hook_item<cds::gc::HP>
66             ,ci::opt::hook<
67                 ci::single_link::member_hook<
68                     offsetof(member_hook_item<cds::gc::HP>, hMember),
69                     ci::opt::gc<cds::gc::HP>
70                 >
71             >
72             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
73             ,co::item_counter< cds::atomicity::item_counter >
74        > MoirQueue_HP_member_ic;
75
76         // cds::gc::HP base hook + stat
77         typedef ci::MoirQueue< cds::gc::HP,
78             base_hook_item<cds::gc::HP>
79             ,ci::opt::hook<
80                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
81             >
82             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
83             ,co::stat< ci::queue_stat<> >
84         > MoirQueue_HP_base_stat;
85
86         // cds::gc::HP member hook + stat
87         typedef ci::MoirQueue< cds::gc::HP,
88             member_hook_item<cds::gc::HP>
89             ,ci::opt::hook<
90                 ci::single_link::member_hook<
91                     offsetof(member_hook_item<cds::gc::HP>, hMember),
92                     ci::opt::gc<cds::gc::HP>
93                 >
94             >
95             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
96             ,co::stat< ci::queue_stat<> >
97         > MoirQueue_HP_member_stat;
98
99         // cds::gc::HP base hook + alignment
100         typedef ci::MoirQueue< cds::gc::HP,
101             base_hook_item<cds::gc::HP>
102             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
103             ,ci::opt::hook<
104                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
105             >
106             ,co::alignment< 32 >
107         > MoirQueue_HP_base_align;
108
109         // cds::gc::HP member hook + alignment
110         typedef ci::MoirQueue< cds::gc::HP,
111             member_hook_item<cds::gc::HP>
112             ,ci::opt::hook<
113                 ci::single_link::member_hook<
114                     offsetof(member_hook_item<cds::gc::HP>, hMember),
115                     ci::opt::gc<cds::gc::HP>
116                 >
117             >
118             ,co::alignment< 32 >
119             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
120         > MoirQueue_HP_member_align;
121
122         // cds::gc::HP base hook + no alignment
123         typedef ci::MoirQueue< cds::gc::HP,
124             base_hook_item<cds::gc::HP>
125             ,ci::opt::hook<
126                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
127             >
128             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
129             ,co::alignment< co::no_special_alignment >
130         > MoirQueue_HP_base_noalign;
131
132         // cds::gc::HP member hook + no alignment
133         typedef ci::MoirQueue< cds::gc::HP,
134             member_hook_item<cds::gc::HP>
135             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
136             ,ci::opt::hook<
137                 ci::single_link::member_hook<
138                     offsetof(member_hook_item<cds::gc::HP>, hMember),
139                     ci::opt::gc<cds::gc::HP>
140                 >
141             >
142             ,co::alignment< co::no_special_alignment >
143         > MoirQueue_HP_member_noalign;
144
145
146         // cds::gc::HP base hook + cache alignment
147         typedef ci::MoirQueue< cds::gc::HP,
148             base_hook_item<cds::gc::HP>
149             ,ci::opt::hook<
150                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
151             >
152             ,co::alignment< co::cache_line_alignment >
153             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
154         > MoirQueue_HP_base_cachealign;
155
156         // cds::gc::HP member hook + cache alignment
157         typedef ci::MoirQueue< cds::gc::HP,
158             member_hook_item<cds::gc::HP>
159             ,ci::opt::hook<
160                 ci::single_link::member_hook<
161                     offsetof(member_hook_item<cds::gc::HP>, hMember),
162                     ci::opt::gc<cds::gc::HP>
163                 >
164             >
165             ,co::alignment< co::cache_line_alignment >
166             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
167         > MoirQueue_HP_member_cachealign;
168
169     }
170
171     TEST(MoirQueue_HP_default)
172     TEST(MoirQueue_HP_default_ic)
173     TEST(MoirQueue_HP_default_stat)
174     TEST(MoirQueue_HP_base)
175     TEST(MoirQueue_HP_member)
176     TEST(MoirQueue_HP_base_ic)
177     TEST(MoirQueue_HP_member_ic)
178     TEST(MoirQueue_HP_base_stat)
179     TEST(MoirQueue_HP_member_stat)
180     TEST(MoirQueue_HP_base_align)
181     TEST(MoirQueue_HP_member_align)
182     TEST(MoirQueue_HP_base_noalign)
183     TEST(MoirQueue_HP_member_noalign)
184     TEST(MoirQueue_HP_base_cachealign)
185     TEST(MoirQueue_HP_member_cachealign)
186 }