3 #include "hdr_intrusive_msqueue.h"
5 #include <cds/intrusive/basket_queue.h>
9 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
12 typedef IntrusiveQueueHeaderTest::base_hook_item< ci::basket_queue::node<cds::gc::HP> > base_hook_item;
13 typedef IntrusiveQueueHeaderTest::member_hook_item< ci::basket_queue::node<cds::gc::HP> > member_hook_item;
15 struct traits_BasketQueue_HP_default : public ci::basket_queue::traits
17 typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
19 typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_default > BasketQueue_HP_default;
22 struct traits_BasketQueue_HP_default_ic : public traits_BasketQueue_HP_default
24 typedef cds::atomicity::item_counter item_counter;
25 typedef co::v::sequential_consistent memory_model;
27 typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_default_ic > BasketQueue_HP_default_ic;
30 typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
31 typename ci::basket_queue::make_traits<
32 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
33 ,co::stat< ci::basket_queue::stat<> >
35 > BasketQueue_HP_default_stat;
38 struct traits_BasketQueue_HP_base : public ci::basket_queue::traits
40 typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
41 typedef ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
43 typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_base > BasketQueue_HP_base;
46 struct traits_BasketQueue_HP_member : public traits_BasketQueue_HP_base
48 typedef ci::basket_queue::member_hook <
49 offsetof( member_hook_item, hMember ),
50 ci::opt::gc < cds::gc::HP >
54 typedef ci::BasketQueue< cds::gc::HP, member_hook_item, traits_BasketQueue_HP_member > BasketQueue_HP_member;
56 /// HP base hook + item counter
57 typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
58 typename ci::basket_queue::make_traits<
59 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
61 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
63 ,co::item_counter< cds::atomicity::item_counter >
64 ,co::memory_model< co::v::relaxed_ordering >
66 > BasketQueue_HP_base_ic;
68 // HP member hook + item counter
69 typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
70 typename ci::basket_queue::make_traits<
72 ci::basket_queue::member_hook<
73 offsetof( member_hook_item, hMember),
74 ci::opt::gc<cds::gc::HP>
77 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
78 ,co::item_counter< cds::atomicity::item_counter >
80 > BasketQueue_HP_member_ic;
82 // HP base hook + stat
83 typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
84 typename ci::basket_queue::make_traits<
86 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
88 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
89 ,co::stat< ci::basket_queue::stat<> >
91 > BasketQueue_HP_base_stat;
93 // HP member hook + stat
94 typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
95 typename ci::basket_queue::make_traits<
97 ci::basket_queue::member_hook<
98 offsetof(member_hook_item, hMember),
99 ci::opt::gc<cds::gc::HP>
102 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
103 ,co::stat< ci::basket_queue::stat<> >
105 > BasketQueue_HP_member_stat;
107 // HP base hook + padding
108 typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
109 typename ci::basket_queue::make_traits<
110 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
112 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
116 > BasketQueue_HP_base_align;
118 // HP member hook + padding
119 typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
120 typename ci::basket_queue::make_traits<
122 ci::basket_queue::member_hook<
123 offsetof(member_hook_item, hMember),
124 ci::opt::gc<cds::gc::HP>
128 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
130 > BasketQueue_HP_member_align;
132 // HP base hook + no padding
133 typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
134 typename ci::basket_queue::make_traits<
136 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
138 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
139 ,co::padding< co::no_special_padding >
141 > BasketQueue_HP_base_noalign;
143 // HP member hook + no padding
144 typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
145 typename ci::basket_queue::make_traits<
146 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
148 ci::basket_queue::member_hook<
149 offsetof(member_hook_item, hMember),
150 ci::opt::gc<cds::gc::HP>
153 ,co::padding< co::no_special_padding >
155 > BasketQueue_HP_member_noalign;
158 // HP base hook + cache padding
159 typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
160 typename ci::basket_queue::make_traits<
162 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
164 ,co::padding< co::cache_line_padding >
165 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
167 > BasketQueue_HP_base_cachealign;
169 // HP member hook + cache padding
170 typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
171 typename ci::basket_queue::make_traits<
173 ci::basket_queue::member_hook<
174 offsetof(member_hook_item, hMember),
175 ci::opt::gc<cds::gc::HP>
178 ,co::padding< co::cache_line_padding >
179 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
181 > BasketQueue_HP_member_cachealign;
184 TEST(BasketQueue_HP_default)
185 TEST(BasketQueue_HP_default_ic)
186 TEST(BasketQueue_HP_default_stat)
187 TEST(BasketQueue_HP_base)
188 TEST(BasketQueue_HP_member)
189 TEST(BasketQueue_HP_base_ic)
190 TEST(BasketQueue_HP_member_ic)
191 TEST(BasketQueue_HP_base_stat)
192 TEST(BasketQueue_HP_member_stat)
193 TEST(BasketQueue_HP_base_align)
194 TEST(BasketQueue_HP_member_align)
195 TEST(BasketQueue_HP_base_noalign)
196 TEST(BasketQueue_HP_member_noalign)
197 TEST(BasketQueue_HP_base_cachealign)
198 TEST(BasketQueue_HP_member_cachealign)