3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/intrusive/moir_queue.h>
9 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
12 typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::HP > > base_item_type;
13 typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::HP > > member_item_type;
15 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
16 typename ci::msqueue::make_traits<
17 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
19 > MoirQueue_HP_default;
22 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
23 typename ci::msqueue::make_traits<
24 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
25 ,co::item_counter< cds::atomicity::item_counter >
26 ,co::memory_model< co::v::sequential_consistent >
28 > MoirQueue_HP_default_ic;
31 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
32 typename ci::msqueue::make_traits<
33 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
34 ,co::stat< ci::msqueue::stat<> >
36 > MoirQueue_HP_default_stat;
39 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
40 typename ci::msqueue::make_traits<
42 ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
44 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
49 typedef ci::MoirQueue< cds::gc::HP, member_item_type,
50 typename ci::msqueue::make_traits<
52 ci::msqueue::member_hook<
53 offsetof( member_item_type, hMember ),
54 ci::opt::gc<cds::gc::HP>
57 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
59 > MoirQueue_HP_member;
61 /// HP base hook + item counter
62 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
63 typename ci::msqueue::make_traits<
64 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
66 ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
68 ,co::item_counter< cds::atomicity::item_counter >
69 ,co::memory_model< co::v::relaxed_ordering >
71 > MoirQueue_HP_base_ic;
73 // HP member hook + item counter
74 typedef ci::MoirQueue< cds::gc::HP, member_item_type,
75 typename ci::msqueue::make_traits<
77 ci::msqueue::member_hook<
78 offsetof( member_item_type, hMember ),
79 ci::opt::gc<cds::gc::HP>
82 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
83 ,co::item_counter< cds::atomicity::item_counter >
85 > MoirQueue_HP_member_ic;
87 // HP base hook + stat
88 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
89 typename ci::msqueue::make_traits<
91 ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
93 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
94 ,co::stat< ci::msqueue::stat<> >
96 > MoirQueue_HP_base_stat;
98 // HP member hook + stat
99 typedef ci::MoirQueue< cds::gc::HP, member_item_type,
100 typename ci::msqueue::make_traits<
102 ci::msqueue::member_hook<
103 offsetof( member_item_type, hMember ),
104 ci::opt::gc<cds::gc::HP>
107 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
108 ,co::stat< ci::msqueue::stat<> >
110 > MoirQueue_HP_member_stat;
112 // HP base hook + alignment
113 typedef ci::MoirQueue< cds::gc::HP, base_item_type,
114 typename ci::msqueue::make_traits<
115 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
117 ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
121 > MoirQueue_HP_base_align;
123 // HP member hook + alignment
124 typedef ci::MoirQueue< cds::gc::HP, member_item_type,
125 typename ci::msqueue::make_traits<
127 ci::msqueue::member_hook<
128 offsetof( member_item_type, hMember ),
129 ci::opt::gc<cds::gc::HP>
133 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
135 > MoirQueue_HP_member_align;
137 // HP base hook + no alignment
138 struct traits_MoirQueue_HP_base_noalign : public ci::msqueue::traits {
139 typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
140 typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
141 enum { alignment = co::no_special_alignment };
143 typedef ci::MoirQueue< cds::gc::HP, base_item_type, traits_MoirQueue_HP_base_noalign > MoirQueue_HP_base_noalign;
145 // HP member hook + no alignment
146 struct traits_MoirQueue_HP_member_noalign : public ci::msqueue::traits {
147 typedef ci::msqueue::member_hook <
148 offsetof( member_item_type, hMember ),
149 ci::opt::gc < cds::gc::HP >
151 typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
152 enum { alignment = co::no_special_alignment };
154 typedef ci::MoirQueue< cds::gc::HP, member_item_type, traits_MoirQueue_HP_member_noalign > MoirQueue_HP_member_noalign;
157 // HP base hook + cache alignment
158 struct traits_MoirQueue_HP_base_cachealign : public traits_MoirQueue_HP_base_noalign
160 enum { alignment = co::cache_line_alignment };
162 typedef ci::MoirQueue< cds::gc::HP, base_item_type, traits_MoirQueue_HP_base_cachealign > MoirQueue_HP_base_cachealign;
164 // HP member hook + cache alignment
165 struct traits_MoirQueue_HP_member_cachealign : public traits_MoirQueue_HP_member_noalign
167 enum { alignment = co::cache_line_alignment };
169 typedef ci::MoirQueue< cds::gc::HP, member_item_type, traits_MoirQueue_HP_member_cachealign > MoirQueue_HP_member_cachealign;
172 TEST(MoirQueue_HP_default)
173 TEST(MoirQueue_HP_default_ic)
174 TEST(MoirQueue_HP_default_stat)
175 TEST(MoirQueue_HP_base)
176 TEST(MoirQueue_HP_member)
177 TEST(MoirQueue_HP_base_ic)
178 TEST(MoirQueue_HP_member_ic)
179 TEST(MoirQueue_HP_base_stat)
180 TEST(MoirQueue_HP_member_stat)
181 TEST(MoirQueue_HP_base_align)
182 TEST(MoirQueue_HP_member_align)
183 TEST(MoirQueue_HP_base_noalign)
184 TEST(MoirQueue_HP_member_noalign)
185 TEST(MoirQueue_HP_base_cachealign)
186 TEST(MoirQueue_HP_member_cachealign)