3 #include "hdr_intrusive_msqueue.h"
4 #include "hdr_intrusive_singlelink_node.h"
6 #include <cds/intrusive/msqueue.h>
11 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
14 typedef ci::MSQueue< cds::gc::HP,
15 base_hook_item<cds::gc::HP>
16 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
20 typedef ci::MSQueue< cds::gc::HP,
21 base_hook_item<cds::gc::HP>
22 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
23 ,co::item_counter< cds::atomicity::item_counter >
24 ,co::memory_model< co::v::sequential_consistent >
25 > MSQueue_HP_default_ic;
28 typedef ci::MSQueue< cds::gc::HP,
29 base_hook_item<cds::gc::HP>
30 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
31 ,co::stat< ci::queue_stat<> >
32 > MSQueue_HP_default_stat;
35 typedef ci::MSQueue< cds::gc::HP,
36 base_hook_item<cds::gc::HP>
38 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
40 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
44 typedef ci::MSQueue< cds::gc::HP,
45 member_hook_item<cds::gc::HP>
47 ci::single_link::member_hook<
48 offsetof(member_hook_item<cds::gc::HP>, hMember),
49 ci::opt::gc<cds::gc::HP>
52 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
55 /// HP base hook + item counter
56 typedef ci::MSQueue< cds::gc::HP,
57 base_hook_item<cds::gc::HP>
58 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
60 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
62 ,co::item_counter< cds::atomicity::item_counter >
63 ,co::memory_model< co::v::relaxed_ordering >
66 // HP member hook + item counter
67 typedef ci::MSQueue< cds::gc::HP,
68 member_hook_item<cds::gc::HP>
70 ci::single_link::member_hook<
71 offsetof(member_hook_item<cds::gc::HP>, hMember),
72 ci::opt::gc<cds::gc::HP>
75 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
76 ,co::item_counter< cds::atomicity::item_counter >
77 > MSQueue_HP_member_ic;
79 // HP base hook + stat
80 typedef ci::MSQueue< cds::gc::HP,
81 base_hook_item<cds::gc::HP>
83 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
85 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
86 ,co::stat< ci::queue_stat<> >
87 > MSQueue_HP_base_stat;
89 // HP member hook + stat
90 typedef ci::MSQueue< cds::gc::HP,
91 member_hook_item<cds::gc::HP>
93 ci::single_link::member_hook<
94 offsetof(member_hook_item<cds::gc::HP>, hMember),
95 ci::opt::gc<cds::gc::HP>
98 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
99 ,co::stat< ci::queue_stat<> >
100 > MSQueue_HP_member_stat;
102 // HP base hook + alignment
103 typedef ci::MSQueue< cds::gc::HP,
104 base_hook_item<cds::gc::HP>
105 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
107 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
110 > MSQueue_HP_base_align;
112 // HP member hook + alignment
113 typedef ci::MSQueue< cds::gc::HP,
114 member_hook_item<cds::gc::HP>
116 ci::single_link::member_hook<
117 offsetof(member_hook_item<cds::gc::HP>, hMember),
118 ci::opt::gc<cds::gc::HP>
122 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
123 > MSQueue_HP_member_align;
125 // HP base hook + no alignment
126 typedef ci::MSQueue< cds::gc::HP,
127 base_hook_item<cds::gc::HP>
129 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
131 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
132 ,co::alignment< co::no_special_alignment >
133 > MSQueue_HP_base_noalign;
135 // HP member hook + no alignment
136 typedef ci::MSQueue< cds::gc::HP,
137 member_hook_item<cds::gc::HP>
138 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
140 ci::single_link::member_hook<
141 offsetof(member_hook_item<cds::gc::HP>, hMember),
142 ci::opt::gc<cds::gc::HP>
145 ,co::alignment< co::no_special_alignment >
146 > MSQueue_HP_member_noalign;
149 // HP base hook + cache alignment
150 typedef ci::MSQueue< cds::gc::HP,
151 base_hook_item<cds::gc::HP>
153 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
155 ,co::alignment< co::cache_line_alignment >
156 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
157 > MSQueue_HP_base_cachealign;
159 // HP member hook + cache alignment
160 typedef ci::MSQueue< cds::gc::HP,
161 member_hook_item<cds::gc::HP>
163 ci::single_link::member_hook<
164 offsetof(member_hook_item<cds::gc::HP>, hMember),
165 ci::opt::gc<cds::gc::HP>
168 ,co::alignment< co::cache_line_alignment >
169 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
170 > MSQueue_HP_member_cachealign;
174 TEST(MSQueue_HP_default)
175 TEST(MSQueue_HP_default_ic)
176 TEST(MSQueue_HP_default_stat)
177 TEST(MSQueue_HP_base)
178 TEST(MSQueue_HP_member)
179 TEST(MSQueue_HP_base_ic)
180 TEST(MSQueue_HP_member_ic)
181 TEST(MSQueue_HP_base_stat)
182 TEST(MSQueue_HP_member_stat)
183 TEST(MSQueue_HP_base_align)
184 TEST(MSQueue_HP_member_align)
185 TEST(MSQueue_HP_base_noalign)
186 TEST(MSQueue_HP_member_noalign)
187 TEST(MSQueue_HP_base_cachealign)
188 TEST(MSQueue_HP_member_cachealign)
191 CPPUNIT_TEST_SUITE_REGISTRATION(queue::IntrusiveQueueHeaderTest);