3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/intrusive/optimistic_queue.h>
5 #include <cds/gc/ptb.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
28 ci::optimistic_queue::node< GC > hMember;
36 typedef ci::OptimisticQueue< cds::gc::PTB,
37 base_hook_item<cds::gc::PTB>
39 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
41 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
42 > OptimisticQueue_PTB_base;
45 typedef ci::OptimisticQueue< cds::gc::PTB,
46 member_hook_item<cds::gc::PTB>
48 ci::optimistic_queue::member_hook<
49 offsetof(member_hook_item<cds::gc::PTB>, hMember),
50 ci::opt::gc<cds::gc::PTB>
53 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
54 > OptimisticQueue_PTB_member;
56 /// PTB base hook + item counter
57 typedef ci::OptimisticQueue< cds::gc::PTB,
58 base_hook_item<cds::gc::PTB>
59 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
61 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
63 ,co::item_counter< cds::atomicity::item_counter >
64 > OptimisticQueue_PTB_base_ic;
66 // PTB member hook + item counter
67 typedef ci::OptimisticQueue< cds::gc::PTB,
68 member_hook_item<cds::gc::PTB>
70 ci::optimistic_queue::member_hook<
71 offsetof(member_hook_item<cds::gc::PTB>, hMember),
72 ci::opt::gc<cds::gc::PTB>
75 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
76 ,co::item_counter< cds::atomicity::item_counter >
77 > OptimisticQueue_PTB_member_ic;
79 // PTB base hook + stat
80 typedef ci::OptimisticQueue< cds::gc::PTB,
81 base_hook_item<cds::gc::PTB>
83 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
85 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
86 ,co::stat< ci::queue_stat<> >
87 > OptimisticQueue_PTB_base_stat;
89 // PTB member hook + stat
90 typedef ci::OptimisticQueue< cds::gc::PTB,
91 member_hook_item<cds::gc::PTB>
93 ci::optimistic_queue::member_hook<
94 offsetof(member_hook_item<cds::gc::PTB>, hMember),
95 ci::opt::gc<cds::gc::PTB>
98 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
99 ,co::stat< ci::queue_stat<> >
100 > OptimisticQueue_PTB_member_stat;
102 // PTB base hook + alignment
103 typedef ci::OptimisticQueue< cds::gc::PTB,
104 base_hook_item<cds::gc::PTB>
105 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
107 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
110 > OptimisticQueue_PTB_base_align;
112 // PTB member hook + alignment
113 typedef ci::OptimisticQueue< cds::gc::PTB,
114 member_hook_item<cds::gc::PTB>
116 ci::optimistic_queue::member_hook<
117 offsetof(member_hook_item<cds::gc::PTB>, hMember),
118 ci::opt::gc<cds::gc::PTB>
122 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
123 > OptimisticQueue_PTB_member_align;
125 // PTB base hook + no alignment
126 typedef ci::OptimisticQueue< cds::gc::PTB,
127 base_hook_item<cds::gc::PTB>
129 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
131 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
132 ,co::alignment< co::no_special_alignment >
133 > OptimisticQueue_PTB_base_noalign;
135 // PTB member hook + no alignment
136 typedef ci::OptimisticQueue< cds::gc::PTB,
137 member_hook_item<cds::gc::PTB>
138 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
140 ci::optimistic_queue::member_hook<
141 offsetof(member_hook_item<cds::gc::PTB>, hMember),
142 ci::opt::gc<cds::gc::PTB>
145 ,co::alignment< co::no_special_alignment >
146 > OptimisticQueue_PTB_member_noalign;
149 // PTB base hook + cache alignment
150 typedef ci::OptimisticQueue< cds::gc::PTB,
151 base_hook_item<cds::gc::PTB>
153 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
155 ,co::alignment< co::cache_line_alignment >
156 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
157 > OptimisticQueue_PTB_base_cachealign;
159 // PTB member hook + cache alignment
160 typedef ci::OptimisticQueue< cds::gc::PTB,
161 member_hook_item<cds::gc::PTB>
163 ci::optimistic_queue::member_hook<
164 offsetof(member_hook_item<cds::gc::PTB>, hMember),
165 ci::opt::gc<cds::gc::PTB>
168 ,co::alignment< co::cache_line_alignment >
169 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
170 > OptimisticQueue_PTB_member_cachealign;
174 TEST(OptimisticQueue_PTB_base)
175 TEST(OptimisticQueue_PTB_member)
176 TEST(OptimisticQueue_PTB_base_ic)
177 TEST(OptimisticQueue_PTB_member_ic)
178 TEST(OptimisticQueue_PTB_base_stat)
179 TEST(OptimisticQueue_PTB_member_stat)
180 TEST(OptimisticQueue_PTB_base_align)
181 TEST(OptimisticQueue_PTB_member_align)
182 TEST(OptimisticQueue_PTB_base_noalign)
183 TEST(OptimisticQueue_PTB_member_noalign)
184 TEST(OptimisticQueue_PTB_base_cachealign)
185 TEST(OptimisticQueue_PTB_member_cachealign)