3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/intrusive/optimistic_queue.h>
9 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
12 template <typename GC>
13 struct base_hook_item: public ci::optimistic_queue::node< GC >
23 template <typename GC>
24 struct member_hook_item
26 ci::optimistic_queue::node< GC > hMember;
36 typedef ci::OptimisticQueue< cds::gc::HP,
37 base_hook_item<cds::gc::HP>
38 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
39 > OptimisticQueue_HP_default;
42 typedef ci::OptimisticQueue< cds::gc::HP,
43 base_hook_item<cds::gc::HP>
44 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
45 ,co::item_counter< cds::atomicity::item_counter >
46 > OptimisticQueue_HP_default_ic;
49 typedef ci::OptimisticQueue< cds::gc::HP,
50 base_hook_item<cds::gc::HP>
51 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
52 ,co::stat< ci::queue_stat<> >
53 ,co::memory_model< co::v::sequential_consistent >
54 > OptimisticQueue_HP_default_stat;
57 typedef ci::OptimisticQueue< cds::gc::HP,
58 base_hook_item<cds::gc::HP>
60 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
62 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
63 ,co::memory_model< co::v::relaxed_ordering >
64 > OptimisticQueue_HP_base;
67 typedef ci::OptimisticQueue< cds::gc::HP,
68 member_hook_item<cds::gc::HP>
70 ci::optimistic_queue::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 > OptimisticQueue_HP_member;
78 /// HP base hook + item counter
79 typedef ci::OptimisticQueue< cds::gc::HP,
80 base_hook_item<cds::gc::HP>
81 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
83 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
85 ,co::item_counter< cds::atomicity::item_counter >
86 > OptimisticQueue_HP_base_ic;
88 // HP member hook + item counter
89 typedef ci::OptimisticQueue< cds::gc::HP,
90 member_hook_item<cds::gc::HP>
92 ci::optimistic_queue::member_hook<
93 offsetof(member_hook_item<cds::gc::HP>, hMember),
94 ci::opt::gc<cds::gc::HP>
97 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
98 ,co::item_counter< cds::atomicity::item_counter >
99 > OptimisticQueue_HP_member_ic;
101 // HP base hook + stat
102 typedef ci::OptimisticQueue< cds::gc::HP,
103 base_hook_item<cds::gc::HP>
105 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
107 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
108 ,co::stat< ci::queue_stat<> >
109 > OptimisticQueue_HP_base_stat;
111 // HP member hook + stat
112 typedef ci::OptimisticQueue< cds::gc::HP,
113 member_hook_item<cds::gc::HP>
115 ci::optimistic_queue::member_hook<
116 offsetof(member_hook_item<cds::gc::HP>, hMember),
117 ci::opt::gc<cds::gc::HP>
120 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
121 ,co::stat< ci::queue_stat<> >
122 > OptimisticQueue_HP_member_stat;
124 // HP base hook + alignment
125 typedef ci::OptimisticQueue< cds::gc::HP,
126 base_hook_item<cds::gc::HP>
127 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
129 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
132 > OptimisticQueue_HP_base_align;
134 // HP member hook + alignment
135 typedef ci::OptimisticQueue< cds::gc::HP,
136 member_hook_item<cds::gc::HP>
138 ci::optimistic_queue::member_hook<
139 offsetof(member_hook_item<cds::gc::HP>, hMember),
140 ci::opt::gc<cds::gc::HP>
144 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
145 > OptimisticQueue_HP_member_align;
147 // HP base hook + no alignment
148 typedef ci::OptimisticQueue< cds::gc::HP,
149 base_hook_item<cds::gc::HP>
151 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
153 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
154 ,co::alignment< co::no_special_alignment >
155 > OptimisticQueue_HP_base_noalign;
157 // HP member hook + no alignment
158 typedef ci::OptimisticQueue< cds::gc::HP,
159 member_hook_item<cds::gc::HP>
160 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
162 ci::optimistic_queue::member_hook<
163 offsetof(member_hook_item<cds::gc::HP>, hMember),
164 ci::opt::gc<cds::gc::HP>
167 ,co::alignment< co::no_special_alignment >
168 > OptimisticQueue_HP_member_noalign;
171 // HP base hook + cache alignment
172 typedef ci::OptimisticQueue< cds::gc::HP,
173 base_hook_item<cds::gc::HP>
175 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
177 ,co::alignment< co::cache_line_alignment >
178 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
179 > OptimisticQueue_HP_base_cachealign;
181 // HP member hook + cache alignment
182 typedef ci::OptimisticQueue< cds::gc::HP,
183 member_hook_item<cds::gc::HP>
185 ci::optimistic_queue::member_hook<
186 offsetof(member_hook_item<cds::gc::HP>, hMember),
187 ci::opt::gc<cds::gc::HP>
190 ,co::alignment< co::cache_line_alignment >
191 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
192 > OptimisticQueue_HP_member_cachealign;
196 TEST(OptimisticQueue_HP_default)
197 TEST(OptimisticQueue_HP_default_ic)
198 TEST(OptimisticQueue_HP_default_stat)
199 TEST(OptimisticQueue_HP_base)
200 TEST(OptimisticQueue_HP_member)
201 TEST(OptimisticQueue_HP_base_ic)
202 TEST(OptimisticQueue_HP_member_ic)
203 TEST(OptimisticQueue_HP_base_stat)
204 TEST(OptimisticQueue_HP_member_stat)
205 TEST(OptimisticQueue_HP_base_align)
206 TEST(OptimisticQueue_HP_member_align)
207 TEST(OptimisticQueue_HP_base_noalign)
208 TEST(OptimisticQueue_HP_member_noalign)
209 TEST(OptimisticQueue_HP_base_cachealign)
210 TEST(OptimisticQueue_HP_member_cachealign)