3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/gc/dhp.h>
5 #include <cds/intrusive/optimistic_queue.h>
9 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
12 struct base_hook_item: public ci::optimistic_queue::node< cds::gc::DHP >
22 struct member_hook_item
26 ci::optimistic_queue::node< cds::gc::DHP > hMember;
34 typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
35 typename ci::optimistic_queue::make_traits<
37 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
39 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
40 ,co::memory_model< co::v::relaxed_ordering >
42 > OptimisticQueue_DHP_base;
45 struct traits_OptimisticQueue_DHP_member : public OptimisticQueue_DHP_base::traits
47 typedef ci::optimistic_queue::member_hook <
48 offsetof( member_hook_item, hMember ),
49 ci::opt::gc < cds::gc::DHP >
52 typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item, traits_OptimisticQueue_DHP_member > OptimisticQueue_DHP_member;
54 /// DHP base hook + item counter
55 typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
56 typename ci::optimistic_queue::make_traits<
57 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
59 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
61 ,co::item_counter< cds::atomicity::item_counter >
63 > OptimisticQueue_DHP_base_ic;
65 // DHP member hook + item counter
66 typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
67 typename ci::optimistic_queue::make_traits<
68 cds::opt::type_traits< traits_OptimisticQueue_DHP_member >
69 ,co::item_counter< cds::atomicity::item_counter >
71 > OptimisticQueue_DHP_member_ic;
73 // DHP base hook + stat
74 typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
75 typename ci::optimistic_queue::make_traits<
77 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
79 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
80 ,co::stat< ci::optimistic_queue::stat<> >
82 > OptimisticQueue_DHP_base_stat;
84 // DHP member hook + stat
85 typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
86 typename ci::optimistic_queue::make_traits<
87 cds::opt::type_traits< OptimisticQueue_DHP_base_stat::traits >
89 ci::optimistic_queue::member_hook<
90 offsetof(member_hook_item, hMember),
91 ci::opt::gc<cds::gc::DHP>
95 > OptimisticQueue_DHP_member_stat;
97 // DHP base hook + alignment
98 typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
99 typename ci::optimistic_queue::make_traits<
100 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
102 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
106 > OptimisticQueue_DHP_base_align;
108 // DHP member hook + alignment
109 typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
110 typename ci::optimistic_queue::make_traits<
112 ci::optimistic_queue::member_hook<
113 offsetof(member_hook_item, hMember),
114 ci::opt::gc<cds::gc::DHP>
118 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
120 > OptimisticQueue_DHP_member_align;
122 // DHP base hook + no alignment
123 typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
124 typename ci::optimistic_queue::make_traits<
126 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
128 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
129 ,co::alignment< co::no_special_alignment >
131 > OptimisticQueue_DHP_base_noalign;
133 // DHP member hook + no alignment
134 typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
135 typename ci::optimistic_queue::make_traits<
136 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
138 ci::optimistic_queue::member_hook<
139 offsetof(member_hook_item, hMember),
140 ci::opt::gc<cds::gc::DHP>
143 ,co::alignment< co::no_special_alignment >
145 > OptimisticQueue_DHP_member_noalign;
148 // DHP base hook + cache alignment
149 typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
150 typename ci::optimistic_queue::make_traits<
152 ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
154 ,co::alignment< co::cache_line_alignment >
155 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
157 > OptimisticQueue_DHP_base_cachealign;
159 // DHP member hook + cache alignment
160 typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
161 typename ci::optimistic_queue::make_traits<
163 ci::optimistic_queue::member_hook<
164 offsetof(member_hook_item, hMember),
165 ci::opt::gc<cds::gc::DHP>
168 ,co::alignment< co::cache_line_alignment >
169 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
171 > OptimisticQueue_DHP_member_cachealign;
174 TEST(OptimisticQueue_DHP_base)
175 TEST(OptimisticQueue_DHP_member)
176 TEST(OptimisticQueue_DHP_base_ic)
177 TEST(OptimisticQueue_DHP_member_ic)
178 TEST(OptimisticQueue_DHP_base_stat)
179 TEST(OptimisticQueue_DHP_member_stat)
180 TEST(OptimisticQueue_DHP_base_align)
181 TEST(OptimisticQueue_DHP_member_align)
182 TEST(OptimisticQueue_DHP_base_noalign)
183 TEST(OptimisticQueue_DHP_member_noalign)
184 TEST(OptimisticQueue_DHP_base_cachealign)
185 TEST(OptimisticQueue_DHP_member_cachealign)