3 #include "hdr_intrusive_msqueue.h"
4 #include "hdr_intrusive_singlelink_node.h"
6 #include <cds/intrusive/msqueue.h>
7 #include <cds/gc/ptb.h>
11 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
16 typedef ci::MSQueue< cds::gc::PTB,
17 base_hook_item<cds::gc::PTB>
19 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
21 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
25 typedef ci::MSQueue< cds::gc::PTB,
26 member_hook_item<cds::gc::PTB>
28 ci::single_link::member_hook<
29 offsetof(member_hook_item<cds::gc::PTB>, hMember),
30 ci::opt::gc<cds::gc::PTB>
33 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
36 /// PTB base hook + item counter
37 typedef ci::MSQueue< cds::gc::PTB,
38 base_hook_item<cds::gc::PTB>
39 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
41 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
43 ,co::item_counter< cds::atomicity::item_counter >
44 > MSQueue_PTB_base_ic;
46 // PTB member hook + item counter
47 typedef ci::MSQueue< 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 > MSQueue_PTB_member_ic;
59 // PTB base hook + stat
60 typedef ci::MSQueue< 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 > MSQueue_PTB_base_stat;
69 // PTB member hook + stat
70 typedef ci::MSQueue< 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 > MSQueue_PTB_member_stat;
82 // PTB base hook + alignment
83 typedef ci::MSQueue< cds::gc::PTB,
84 base_hook_item<cds::gc::PTB>
85 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
87 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
90 > MSQueue_PTB_base_align;
92 // PTB member hook + alignment
93 typedef ci::MSQueue< cds::gc::PTB,
94 member_hook_item<cds::gc::PTB>
96 ci::single_link::member_hook<
97 offsetof(member_hook_item<cds::gc::PTB>, hMember),
98 ci::opt::gc<cds::gc::PTB>
102 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
103 > MSQueue_PTB_member_align;
105 // PTB base hook + no alignment
106 typedef ci::MSQueue< cds::gc::PTB,
107 base_hook_item<cds::gc::PTB>
109 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
111 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
112 ,co::alignment< co::no_special_alignment >
113 > MSQueue_PTB_base_noalign;
115 // PTB member hook + no alignment
116 typedef ci::MSQueue< cds::gc::PTB,
117 member_hook_item<cds::gc::PTB>
118 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
120 ci::single_link::member_hook<
121 offsetof(member_hook_item<cds::gc::PTB>, hMember),
122 ci::opt::gc<cds::gc::PTB>
125 ,co::alignment< co::no_special_alignment >
126 > MSQueue_PTB_member_noalign;
129 // PTB base hook + cache alignment
130 typedef ci::MSQueue< cds::gc::PTB,
131 base_hook_item<cds::gc::PTB>
133 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
135 ,co::alignment< co::cache_line_alignment >
136 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
137 > MSQueue_PTB_base_cachealign;
139 // PTB member hook + cache alignment
140 typedef ci::MSQueue< cds::gc::PTB,
141 member_hook_item<cds::gc::PTB>
143 ci::single_link::member_hook<
144 offsetof(member_hook_item<cds::gc::PTB>, hMember),
145 ci::opt::gc<cds::gc::PTB>
148 ,co::alignment< co::cache_line_alignment >
149 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
150 > MSQueue_PTB_member_cachealign;
154 TEST(MSQueue_PTB_base)
155 TEST(MSQueue_PTB_member)
156 TEST(MSQueue_PTB_base_ic)
157 TEST(MSQueue_PTB_member_ic)
158 TEST(MSQueue_PTB_base_stat)
159 TEST(MSQueue_PTB_member_stat)
160 TEST(MSQueue_PTB_base_align)
161 TEST(MSQueue_PTB_member_align)
162 TEST(MSQueue_PTB_base_noalign)
163 TEST(MSQueue_PTB_member_noalign)
164 TEST(MSQueue_PTB_base_cachealign)
165 TEST(MSQueue_PTB_member_cachealign)