3 #include "hdr_intrusive_msqueue.h"
5 #include "hdr_intrusive_basketqueue_node.h"
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
13 typedef ci::BasketQueue< cds::gc::HP,
14 basket_queue::base_hook_item<cds::gc::HP>
15 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
16 > BasketQueue_HP_default;
19 typedef ci::BasketQueue< cds::gc::HP,
20 basket_queue::base_hook_item<cds::gc::HP>
21 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
22 ,co::item_counter< cds::atomicity::item_counter >
23 ,co::memory_model< co::v::sequential_consistent >
24 > BasketQueue_HP_default_ic;
27 typedef ci::BasketQueue< cds::gc::HP,
28 basket_queue::base_hook_item<cds::gc::HP>
29 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
30 ,co::stat< ci::queue_stat<> >
31 > BasketQueue_HP_default_stat;
34 typedef ci::BasketQueue< cds::gc::HP,
35 basket_queue::base_hook_item<cds::gc::HP>
37 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
39 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
40 > BasketQueue_HP_base;
43 typedef ci::BasketQueue< cds::gc::HP,
44 basket_queue::member_hook_item<cds::gc::HP>
46 ci::basket_queue::member_hook<
47 offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
48 ci::opt::gc<cds::gc::HP>
51 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
52 > BasketQueue_HP_member;
54 /// HP base hook + item counter
55 typedef ci::BasketQueue< cds::gc::HP,
56 basket_queue::base_hook_item<cds::gc::HP>
57 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
59 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
61 ,co::item_counter< cds::atomicity::item_counter >
62 ,co::memory_model< co::v::relaxed_ordering >
63 > BasketQueue_HP_base_ic;
65 // HP member hook + item counter
66 typedef ci::BasketQueue< cds::gc::HP,
67 basket_queue::member_hook_item<cds::gc::HP>
69 ci::basket_queue::member_hook<
70 offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
71 ci::opt::gc<cds::gc::HP>
74 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
75 ,co::item_counter< cds::atomicity::item_counter >
76 > BasketQueue_HP_member_ic;
78 // HP base hook + stat
79 typedef ci::BasketQueue< cds::gc::HP,
80 basket_queue::base_hook_item<cds::gc::HP>
82 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
84 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
85 ,co::stat< ci::queue_stat<> >
86 > BasketQueue_HP_base_stat;
88 // HP member hook + stat
89 typedef ci::BasketQueue< cds::gc::HP,
90 basket_queue::member_hook_item<cds::gc::HP>
92 ci::basket_queue::member_hook<
93 offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
94 ci::opt::gc<cds::gc::HP>
97 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
98 ,co::stat< ci::queue_stat<> >
99 > BasketQueue_HP_member_stat;
101 // HP base hook + alignment
102 typedef ci::BasketQueue< cds::gc::HP,
103 basket_queue::base_hook_item<cds::gc::HP>
104 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
106 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
109 > BasketQueue_HP_base_align;
111 // HP member hook + alignment
112 typedef ci::BasketQueue< cds::gc::HP,
113 basket_queue::member_hook_item<cds::gc::HP>
115 ci::basket_queue::member_hook<
116 offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
117 ci::opt::gc<cds::gc::HP>
121 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
122 > BasketQueue_HP_member_align;
124 // HP base hook + no alignment
125 typedef ci::BasketQueue< cds::gc::HP,
126 basket_queue::base_hook_item<cds::gc::HP>
128 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
130 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
131 ,co::alignment< co::no_special_alignment >
132 > BasketQueue_HP_base_noalign;
134 // HP member hook + no alignment
135 typedef ci::BasketQueue< cds::gc::HP,
136 basket_queue::member_hook_item<cds::gc::HP>
137 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
139 ci::basket_queue::member_hook<
140 offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
141 ci::opt::gc<cds::gc::HP>
144 ,co::alignment< co::no_special_alignment >
145 > BasketQueue_HP_member_noalign;
148 // HP base hook + cache alignment
149 typedef ci::BasketQueue< cds::gc::HP,
150 basket_queue::base_hook_item<cds::gc::HP>
152 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
154 ,co::alignment< co::cache_line_alignment >
155 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
156 > BasketQueue_HP_base_cachealign;
158 // HP member hook + cache alignment
159 typedef ci::BasketQueue< cds::gc::HP,
160 basket_queue::member_hook_item<cds::gc::HP>
162 ci::basket_queue::member_hook<
163 offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
164 ci::opt::gc<cds::gc::HP>
167 ,co::alignment< co::cache_line_alignment >
168 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
169 > BasketQueue_HP_member_cachealign;
173 TEST(BasketQueue_HP_default)
174 TEST(BasketQueue_HP_default_ic)
175 TEST(BasketQueue_HP_default_stat)
176 TEST(BasketQueue_HP_base)
177 TEST(BasketQueue_HP_member)
178 TEST(BasketQueue_HP_base_ic)
179 TEST(BasketQueue_HP_member_ic)
180 TEST(BasketQueue_HP_base_stat)
181 TEST(BasketQueue_HP_member_stat)
182 TEST(BasketQueue_HP_base_align)
183 TEST(BasketQueue_HP_member_align)
184 TEST(BasketQueue_HP_base_noalign)
185 TEST(BasketQueue_HP_member_noalign)
186 TEST(BasketQueue_HP_base_cachealign)
187 TEST(BasketQueue_HP_member_cachealign)