3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/gc/dhp.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::DHP> > base_hook_item;
13 typedef IntrusiveQueueHeaderTest::member_hook_item < ci::basket_queue::node<cds::gc::DHP> > member_hook_item;
16 struct traits_BasketQueue_disposer : public
17 ci::basket_queue::make_traits < ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer > >::type
19 typedef ci::basket_queue::base_hook< ci::opt::gc < cds::gc::DHP > > hook;
21 typedef ci::BasketQueue< cds::gc::DHP, base_hook_item, traits_BasketQueue_disposer > BasketQueue_DHP_base;
24 struct traits_BasketQueue_member : public traits_BasketQueue_disposer
26 typedef ci::basket_queue::member_hook< offsetof( member_hook_item, hMember ), ci::opt::gc < cds::gc::DHP > > hook;
28 typedef ci::BasketQueue< cds::gc::DHP, member_hook_item, traits_BasketQueue_member >BasketQueue_DHP_member;
30 /// DHP base hook + item counter
31 typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
32 typename ci::basket_queue::make_traits<
33 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
35 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
37 ,co::item_counter< cds::atomicity::item_counter >
38 ,co::memory_model< co::v::relaxed_ordering >
40 > BasketQueue_DHP_base_ic;
42 // DHP member hook + item counter
43 typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
44 typename ci::basket_queue::make_traits<
46 ci::basket_queue::member_hook<
47 offsetof( member_hook_item, hMember),
48 ci::opt::gc<cds::gc::DHP>
51 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
52 ,co::item_counter< cds::atomicity::item_counter >
54 > BasketQueue_DHP_member_ic;
56 // DHP base hook + stat
57 typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
58 typename ci::basket_queue::make_traits<
60 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
62 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
63 ,co::stat< ci::basket_queue::stat<> >
65 > BasketQueue_DHP_base_stat;
67 // DHP member hook + stat
68 typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
69 typename ci::basket_queue::make_traits<
71 ci::basket_queue::member_hook<
72 offsetof(member_hook_item, hMember),
73 ci::opt::gc<cds::gc::DHP>
76 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
77 ,co::stat< ci::basket_queue::stat<> >
79 > BasketQueue_DHP_member_stat;
81 // DHP base hook + alignment
82 typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
83 typename ci::basket_queue::make_traits<
84 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
86 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
90 > BasketQueue_DHP_base_align;
92 // DHP member hook + alignment
93 typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
94 typename ci::basket_queue::make_traits<
96 ci::basket_queue::member_hook<
97 offsetof(member_hook_item, hMember),
98 ci::opt::gc<cds::gc::DHP>
102 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
104 > BasketQueue_DHP_member_align;
106 // DHP base hook + no alignment
107 typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
108 typename ci::basket_queue::make_traits<
110 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
112 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
113 ,co::alignment< co::no_special_alignment >
115 > BasketQueue_DHP_base_noalign;
117 // DHP member hook + no alignment
118 typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
119 typename ci::basket_queue::make_traits<
120 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
122 ci::basket_queue::member_hook<
123 offsetof(member_hook_item, hMember),
124 ci::opt::gc<cds::gc::DHP>
127 ,co::alignment< co::no_special_alignment >
129 > BasketQueue_DHP_member_noalign;
132 // DHP base hook + cache alignment
133 typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
134 typename ci::basket_queue::make_traits<
136 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
138 ,co::alignment< co::cache_line_alignment >
139 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
141 > BasketQueue_DHP_base_cachealign;
143 // DHP member hook + cache alignment
144 typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
145 typename ci::basket_queue::make_traits<
147 ci::basket_queue::member_hook<
148 offsetof(member_hook_item, hMember),
149 ci::opt::gc<cds::gc::DHP>
152 ,co::alignment< co::cache_line_alignment >
153 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
155 > BasketQueue_DHP_member_cachealign;
158 TEST(BasketQueue_DHP_base)
159 TEST(BasketQueue_DHP_member)
160 TEST(BasketQueue_DHP_base_ic)
161 TEST(BasketQueue_DHP_member_ic)
162 TEST(BasketQueue_DHP_base_stat)
163 TEST(BasketQueue_DHP_member_stat)
164 TEST(BasketQueue_DHP_base_align)
165 TEST(BasketQueue_DHP_member_align)
166 TEST(BasketQueue_DHP_base_noalign)
167 TEST(BasketQueue_DHP_member_noalign)
168 TEST(BasketQueue_DHP_base_cachealign)
169 TEST(BasketQueue_DHP_member_cachealign)