Replace cds::ref/boost::ref with std::ref, remove cds::unref and cds/ref.h header
[libcds.git] / tests / test-hdr / queue / hdr_intrusive_basketqueue_hp.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_msqueue.h"
4
5 #include "hdr_intrusive_basketqueue_node.h"
6 #include <cds/gc/hp.h>
7
8 namespace queue {
9
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
11
12     namespace {
13         typedef ci::BasketQueue< cds::gc::HP,
14             basket_queue::base_hook_item<cds::gc::HP>
15             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
16         > BasketQueue_HP_default;
17
18         /// HP + item counter
19         typedef ci::BasketQueue< cds::gc::HP,
20             basket_queue::base_hook_item<cds::gc::HP>
21             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
22             ,co::item_counter< cds::atomicity::item_counter >
23             ,co::memory_model< co::v::sequential_consistent >
24         > BasketQueue_HP_default_ic;
25
26         /// HP + stat
27         typedef ci::BasketQueue< cds::gc::HP,
28             basket_queue::base_hook_item<cds::gc::HP>
29             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
30             ,co::stat< ci::queue_stat<> >
31         > BasketQueue_HP_default_stat;
32
33         // HP base hook
34         typedef ci::BasketQueue< cds::gc::HP,
35             basket_queue::base_hook_item<cds::gc::HP>
36             ,ci::opt::hook<
37                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
38             >
39             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
40         > BasketQueue_HP_base;
41
42         // HP member hook
43         typedef ci::BasketQueue< cds::gc::HP,
44             basket_queue::member_hook_item<cds::gc::HP>
45             ,ci::opt::hook<
46                 ci::basket_queue::member_hook<
47                     offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
48                     ci::opt::gc<cds::gc::HP>
49                 >
50             >
51             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
52         > BasketQueue_HP_member;
53
54         /// HP base hook + item counter
55         typedef ci::BasketQueue< cds::gc::HP,
56             basket_queue::base_hook_item<cds::gc::HP>
57             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
58             ,ci::opt::hook<
59                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
60             >
61             ,co::item_counter< cds::atomicity::item_counter >
62             ,co::memory_model< co::v::relaxed_ordering >
63         > BasketQueue_HP_base_ic;
64
65         // HP member hook + item counter
66         typedef ci::BasketQueue< cds::gc::HP,
67             basket_queue::member_hook_item<cds::gc::HP>
68             ,ci::opt::hook<
69                 ci::basket_queue::member_hook<
70                     offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
71                     ci::opt::gc<cds::gc::HP>
72                 >
73             >
74             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
75             ,co::item_counter< cds::atomicity::item_counter >
76        > BasketQueue_HP_member_ic;
77
78         // HP base hook + stat
79         typedef ci::BasketQueue< cds::gc::HP,
80             basket_queue::base_hook_item<cds::gc::HP>
81             ,ci::opt::hook<
82                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
83             >
84             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
85             ,co::stat< ci::queue_stat<> >
86         > BasketQueue_HP_base_stat;
87
88         // HP member hook + stat
89         typedef ci::BasketQueue< cds::gc::HP,
90             basket_queue::member_hook_item<cds::gc::HP>
91             ,ci::opt::hook<
92                 ci::basket_queue::member_hook<
93                     offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
94                     ci::opt::gc<cds::gc::HP>
95                 >
96             >
97             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
98             ,co::stat< ci::queue_stat<> >
99         > BasketQueue_HP_member_stat;
100
101         // HP base hook + alignment
102         typedef ci::BasketQueue< cds::gc::HP,
103             basket_queue::base_hook_item<cds::gc::HP>
104             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
105             ,ci::opt::hook<
106                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
107             >
108             ,co::alignment< 32 >
109         > BasketQueue_HP_base_align;
110
111         // HP member hook + alignment
112         typedef ci::BasketQueue< cds::gc::HP,
113             basket_queue::member_hook_item<cds::gc::HP>
114             ,ci::opt::hook<
115                 ci::basket_queue::member_hook<
116                     offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
117                     ci::opt::gc<cds::gc::HP>
118                 >
119             >
120             ,co::alignment< 32 >
121             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
122         > BasketQueue_HP_member_align;
123
124         // HP base hook + no alignment
125         typedef ci::BasketQueue< cds::gc::HP,
126             basket_queue::base_hook_item<cds::gc::HP>
127             ,ci::opt::hook<
128                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
129             >
130             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
131             ,co::alignment< co::no_special_alignment >
132         > BasketQueue_HP_base_noalign;
133
134         // HP member hook + no alignment
135         typedef ci::BasketQueue< cds::gc::HP,
136             basket_queue::member_hook_item<cds::gc::HP>
137             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
138             ,ci::opt::hook<
139                 ci::basket_queue::member_hook<
140                     offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
141                     ci::opt::gc<cds::gc::HP>
142                 >
143             >
144             ,co::alignment< co::no_special_alignment >
145         > BasketQueue_HP_member_noalign;
146
147
148         // HP base hook + cache alignment
149         typedef ci::BasketQueue< cds::gc::HP,
150             basket_queue::base_hook_item<cds::gc::HP>
151             ,ci::opt::hook<
152                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
153             >
154             ,co::alignment< co::cache_line_alignment >
155             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
156         > BasketQueue_HP_base_cachealign;
157
158         // HP member hook + cache alignment
159         typedef ci::BasketQueue< cds::gc::HP,
160             basket_queue::member_hook_item<cds::gc::HP>
161             ,ci::opt::hook<
162                 ci::basket_queue::member_hook<
163                     offsetof(basket_queue::member_hook_item<cds::gc::HP>, hMember),
164                     ci::opt::gc<cds::gc::HP>
165                 >
166             >
167             ,co::alignment< co::cache_line_alignment >
168             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
169         > BasketQueue_HP_member_cachealign;
170
171     }
172
173     TEST(BasketQueue_HP_default)
174     TEST(BasketQueue_HP_default_ic)
175     TEST(BasketQueue_HP_default_stat)
176     TEST(BasketQueue_HP_base)
177     TEST(BasketQueue_HP_member)
178     TEST(BasketQueue_HP_base_ic)
179     TEST(BasketQueue_HP_member_ic)
180     TEST(BasketQueue_HP_base_stat)
181     TEST(BasketQueue_HP_member_stat)
182     TEST(BasketQueue_HP_base_align)
183     TEST(BasketQueue_HP_member_align)
184     TEST(BasketQueue_HP_base_noalign)
185     TEST(BasketQueue_HP_member_noalign)
186     TEST(BasketQueue_HP_base_cachealign)
187     TEST(BasketQueue_HP_member_cachealign)
188 }