3 #include "hdr_intrusive_msqueue.h"
5 #include "hdr_intrusive_basketqueue_node.h"
6 #include <cds/gc/ptb.h>
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
14 typedef ci::BasketQueue< cds::gc::PTB,
15 basket_queue::base_hook_item<cds::gc::PTB>
17 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
19 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
20 > BasketQueue_PTB_base;
23 typedef ci::BasketQueue< cds::gc::PTB,
24 basket_queue::member_hook_item<cds::gc::PTB>
26 ci::basket_queue::member_hook<
27 offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
28 ci::opt::gc<cds::gc::PTB>
31 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
32 > BasketQueue_PTB_member;
34 /// PTB base hook + item counter
35 typedef ci::BasketQueue< cds::gc::PTB,
36 basket_queue::base_hook_item<cds::gc::PTB>
37 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
39 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
41 ,co::item_counter< cds::atomicity::item_counter >
42 ,co::memory_model< co::v::relaxed_ordering >
43 > BasketQueue_PTB_base_ic;
45 // PTB member hook + item counter
46 typedef ci::BasketQueue< cds::gc::PTB,
47 basket_queue::member_hook_item<cds::gc::PTB>
49 ci::basket_queue::member_hook<
50 offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
51 ci::opt::gc<cds::gc::PTB>
54 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
55 ,co::item_counter< cds::atomicity::item_counter >
56 > BasketQueue_PTB_member_ic;
58 // PTB base hook + stat
59 typedef ci::BasketQueue< cds::gc::PTB,
60 basket_queue::base_hook_item<cds::gc::PTB>
62 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
64 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
65 ,co::stat< ci::queue_stat<> >
66 > BasketQueue_PTB_base_stat;
68 // PTB member hook + stat
69 typedef ci::BasketQueue< cds::gc::PTB,
70 basket_queue::member_hook_item<cds::gc::PTB>
72 ci::basket_queue::member_hook<
73 offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
74 ci::opt::gc<cds::gc::PTB>
77 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
78 ,co::stat< ci::queue_stat<> >
79 > BasketQueue_PTB_member_stat;
81 // PTB base hook + alignment
82 typedef ci::BasketQueue< cds::gc::PTB,
83 basket_queue::base_hook_item<cds::gc::PTB>
84 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
86 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
89 > BasketQueue_PTB_base_align;
91 // PTB member hook + alignment
92 typedef ci::BasketQueue< cds::gc::PTB,
93 basket_queue::member_hook_item<cds::gc::PTB>
95 ci::basket_queue::member_hook<
96 offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
97 ci::opt::gc<cds::gc::PTB>
101 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
102 > BasketQueue_PTB_member_align;
104 // PTB base hook + no alignment
105 typedef ci::BasketQueue< cds::gc::PTB,
106 basket_queue::base_hook_item<cds::gc::PTB>
108 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
110 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
111 ,co::alignment< co::no_special_alignment >
112 > BasketQueue_PTB_base_noalign;
114 // PTB member hook + no alignment
115 typedef ci::BasketQueue< cds::gc::PTB,
116 basket_queue::member_hook_item<cds::gc::PTB>
117 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
119 ci::basket_queue::member_hook<
120 offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
121 ci::opt::gc<cds::gc::PTB>
124 ,co::alignment< co::no_special_alignment >
125 > BasketQueue_PTB_member_noalign;
128 // PTB base hook + cache alignment
129 typedef ci::BasketQueue< cds::gc::PTB,
130 basket_queue::base_hook_item<cds::gc::PTB>
132 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
134 ,co::alignment< co::cache_line_alignment >
135 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
136 > BasketQueue_PTB_base_cachealign;
138 // PTB member hook + cache alignment
139 typedef ci::BasketQueue< cds::gc::PTB,
140 basket_queue::member_hook_item<cds::gc::PTB>
142 ci::basket_queue::member_hook<
143 offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
144 ci::opt::gc<cds::gc::PTB>
147 ,co::alignment< co::cache_line_alignment >
148 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
149 > BasketQueue_PTB_member_cachealign;
153 TEST(BasketQueue_PTB_base)
154 TEST(BasketQueue_PTB_member)
155 TEST(BasketQueue_PTB_base_ic)
156 TEST(BasketQueue_PTB_member_ic)
157 TEST(BasketQueue_PTB_base_stat)
158 TEST(BasketQueue_PTB_member_stat)
159 TEST(BasketQueue_PTB_base_align)
160 TEST(BasketQueue_PTB_member_align)
161 TEST(BasketQueue_PTB_base_noalign)
162 TEST(BasketQueue_PTB_member_noalign)
163 TEST(BasketQueue_PTB_base_cachealign)
164 TEST(BasketQueue_PTB_member_cachealign)