3 #include "hdr_intrusive_msqueue.h"
4 #include "hdr_intrusive_singlelink_node.h"
5 #include <cds/intrusive/moir_queue.h>
6 #include <cds/gc/ptb.h>
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
15 typedef ci::MoirQueue< cds::gc::PTB,
16 base_hook_item<cds::gc::PTB>
18 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
20 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
24 typedef ci::MoirQueue< cds::gc::PTB,
25 member_hook_item<cds::gc::PTB>
27 ci::single_link::member_hook<
28 offsetof(member_hook_item<cds::gc::PTB>, hMember),
29 ci::opt::gc<cds::gc::PTB>
32 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
33 > MoirQueue_PTB_member;
35 /// PTB base hook + item counter
36 typedef ci::MoirQueue< cds::gc::PTB,
37 base_hook_item<cds::gc::PTB>
38 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
40 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
42 ,co::item_counter< cds::atomicity::item_counter >
43 ,co::memory_model< co::v::sequential_consistent >
44 > MoirQueue_PTB_base_ic;
46 // PTB member hook + item counter
47 typedef ci::MoirQueue< cds::gc::PTB,
48 member_hook_item<cds::gc::PTB>
50 ci::single_link::member_hook<
51 offsetof(member_hook_item<cds::gc::PTB>, hMember),
52 ci::opt::gc<cds::gc::PTB>
55 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
56 ,co::item_counter< cds::atomicity::item_counter >
57 > MoirQueue_PTB_member_ic;
59 // PTB base hook + stat
60 typedef ci::MoirQueue< cds::gc::PTB,
61 base_hook_item<cds::gc::PTB>
63 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
65 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
66 ,co::stat< ci::queue_stat<> >
67 > MoirQueue_PTB_base_stat;
69 // PTB member hook + stat
70 typedef ci::MoirQueue< cds::gc::PTB,
71 member_hook_item<cds::gc::PTB>
73 ci::single_link::member_hook<
74 offsetof(member_hook_item<cds::gc::PTB>, hMember),
75 ci::opt::gc<cds::gc::PTB>
78 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
79 ,co::stat< ci::queue_stat<> >
80 ,co::memory_model< co::v::relaxed_ordering >
81 > MoirQueue_PTB_member_stat;
83 // PTB base hook + alignment
84 typedef ci::MoirQueue< cds::gc::PTB,
85 base_hook_item<cds::gc::PTB>
86 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
88 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
91 > MoirQueue_PTB_base_align;
93 // PTB member hook + alignment
94 typedef ci::MoirQueue< cds::gc::PTB,
95 member_hook_item<cds::gc::PTB>
97 ci::single_link::member_hook<
98 offsetof(member_hook_item<cds::gc::PTB>, hMember),
99 ci::opt::gc<cds::gc::PTB>
103 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
104 > MoirQueue_PTB_member_align;
106 // PTB base hook + no alignment
107 typedef ci::MoirQueue< cds::gc::PTB,
108 base_hook_item<cds::gc::PTB>
110 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
112 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
113 ,co::alignment< co::no_special_alignment >
114 > MoirQueue_PTB_base_noalign;
116 // PTB member hook + no alignment
117 typedef ci::MoirQueue< cds::gc::PTB,
118 member_hook_item<cds::gc::PTB>
119 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
121 ci::single_link::member_hook<
122 offsetof(member_hook_item<cds::gc::PTB>, hMember),
123 ci::opt::gc<cds::gc::PTB>
126 ,co::alignment< co::no_special_alignment >
127 > MoirQueue_PTB_member_noalign;
130 // PTB base hook + cache alignment
131 typedef ci::MoirQueue< cds::gc::PTB,
132 base_hook_item<cds::gc::PTB>
134 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
136 ,co::alignment< co::cache_line_alignment >
137 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
138 > MoirQueue_PTB_base_cachealign;
140 // PTB member hook + cache alignment
141 typedef ci::MoirQueue< cds::gc::PTB,
142 member_hook_item<cds::gc::PTB>
144 ci::single_link::member_hook<
145 offsetof(member_hook_item<cds::gc::PTB>, hMember),
146 ci::opt::gc<cds::gc::PTB>
149 ,co::alignment< co::cache_line_alignment >
150 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
151 > MoirQueue_PTB_member_cachealign;
155 TEST(MoirQueue_PTB_base)
156 TEST(MoirQueue_PTB_member)
157 TEST(MoirQueue_PTB_base_ic)
158 TEST(MoirQueue_PTB_member_ic)
159 TEST(MoirQueue_PTB_base_stat)
160 TEST(MoirQueue_PTB_member_stat)
161 TEST(MoirQueue_PTB_base_align)
162 TEST(MoirQueue_PTB_member_align)
163 TEST(MoirQueue_PTB_base_noalign)
164 TEST(MoirQueue_PTB_member_noalign)
165 TEST(MoirQueue_PTB_base_cachealign)
166 TEST(MoirQueue_PTB_member_cachealign)