3 #include "hdr_intrusive_msqueue.h"
4 #include "hdr_intrusive_singlelink_node.h"
5 #include <cds/intrusive/moir_queue.h>
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
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;
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;
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;
32 // cds::gc::HP base hook
33 typedef ci::MoirQueue< cds::gc::HP,
34 base_hook_item<cds::gc::HP>
36 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
38 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
41 // cds::gc::HP member hook
42 typedef ci::MoirQueue< cds::gc::HP,
43 member_hook_item<cds::gc::HP>
45 ci::single_link::member_hook<
46 offsetof(member_hook_item<cds::gc::HP>, hMember),
47 ci::opt::gc<cds::gc::HP>
50 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
51 > MoirQueue_HP_member;
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 >
58 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
60 ,co::item_counter< cds::atomicity::item_counter >
61 > MoirQueue_HP_base_ic;
63 // cds::gc::HP member hook + item counter
64 typedef ci::MoirQueue< cds::gc::HP,
65 member_hook_item<cds::gc::HP>
67 ci::single_link::member_hook<
68 offsetof(member_hook_item<cds::gc::HP>, hMember),
69 ci::opt::gc<cds::gc::HP>
72 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
73 ,co::item_counter< cds::atomicity::item_counter >
74 > MoirQueue_HP_member_ic;
76 // cds::gc::HP base hook + stat
77 typedef ci::MoirQueue< cds::gc::HP,
78 base_hook_item<cds::gc::HP>
80 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
82 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
83 ,co::stat< ci::queue_stat<> >
84 > MoirQueue_HP_base_stat;
86 // cds::gc::HP member hook + stat
87 typedef ci::MoirQueue< cds::gc::HP,
88 member_hook_item<cds::gc::HP>
90 ci::single_link::member_hook<
91 offsetof(member_hook_item<cds::gc::HP>, hMember),
92 ci::opt::gc<cds::gc::HP>
95 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
96 ,co::stat< ci::queue_stat<> >
97 > MoirQueue_HP_member_stat;
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 >
104 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
107 > MoirQueue_HP_base_align;
109 // cds::gc::HP member hook + alignment
110 typedef ci::MoirQueue< cds::gc::HP,
111 member_hook_item<cds::gc::HP>
113 ci::single_link::member_hook<
114 offsetof(member_hook_item<cds::gc::HP>, hMember),
115 ci::opt::gc<cds::gc::HP>
119 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
120 > MoirQueue_HP_member_align;
122 // cds::gc::HP base hook + no alignment
123 typedef ci::MoirQueue< cds::gc::HP,
124 base_hook_item<cds::gc::HP>
126 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
128 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
129 ,co::alignment< co::no_special_alignment >
130 > MoirQueue_HP_base_noalign;
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 >
137 ci::single_link::member_hook<
138 offsetof(member_hook_item<cds::gc::HP>, hMember),
139 ci::opt::gc<cds::gc::HP>
142 ,co::alignment< co::no_special_alignment >
143 > MoirQueue_HP_member_noalign;
146 // cds::gc::HP base hook + cache alignment
147 typedef ci::MoirQueue< cds::gc::HP,
148 base_hook_item<cds::gc::HP>
150 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
152 ,co::alignment< co::cache_line_alignment >
153 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
154 > MoirQueue_HP_base_cachealign;
156 // cds::gc::HP member hook + cache alignment
157 typedef ci::MoirQueue< cds::gc::HP,
158 member_hook_item<cds::gc::HP>
160 ci::single_link::member_hook<
161 offsetof(member_hook_item<cds::gc::HP>, hMember),
162 ci::opt::gc<cds::gc::HP>
165 ,co::alignment< co::cache_line_alignment >
166 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
167 > MoirQueue_HP_member_cachealign;
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)