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_ptb.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_msqueue.h"
4
5 #include "hdr_intrusive_basketqueue_node.h"
6 #include <cds/gc/ptb.h>
7
8 namespace queue {
9
10 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
11
12     namespace {
13         // PTB base hook
14         typedef ci::BasketQueue< cds::gc::PTB,
15             basket_queue::base_hook_item<cds::gc::PTB>
16             ,ci::opt::hook<
17                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
18             >
19             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
20         > BasketQueue_PTB_base;
21
22         // PTB member hook
23         typedef ci::BasketQueue< cds::gc::PTB,
24             basket_queue::member_hook_item<cds::gc::PTB>
25             ,ci::opt::hook<
26                 ci::basket_queue::member_hook<
27                     offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
28                     ci::opt::gc<cds::gc::PTB>
29                 >
30             >
31             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
32         > BasketQueue_PTB_member;
33
34         /// PTB base hook + item counter
35         typedef ci::BasketQueue< cds::gc::PTB,
36             basket_queue::base_hook_item<cds::gc::PTB>
37             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
38             ,ci::opt::hook<
39                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
40             >
41             ,co::item_counter< cds::atomicity::item_counter >
42             ,co::memory_model< co::v::relaxed_ordering >
43         > BasketQueue_PTB_base_ic;
44
45         // PTB member hook + item counter
46         typedef ci::BasketQueue< cds::gc::PTB,
47             basket_queue::member_hook_item<cds::gc::PTB>
48             ,ci::opt::hook<
49                 ci::basket_queue::member_hook<
50                     offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
51                     ci::opt::gc<cds::gc::PTB>
52                 >
53             >
54             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
55             ,co::item_counter< cds::atomicity::item_counter >
56        > BasketQueue_PTB_member_ic;
57
58         // PTB base hook + stat
59         typedef ci::BasketQueue< cds::gc::PTB,
60             basket_queue::base_hook_item<cds::gc::PTB>
61             ,ci::opt::hook<
62                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
63             >
64             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
65             ,co::stat< ci::queue_stat<> >
66         > BasketQueue_PTB_base_stat;
67
68         // PTB member hook + stat
69         typedef ci::BasketQueue< cds::gc::PTB,
70             basket_queue::member_hook_item<cds::gc::PTB>
71             ,ci::opt::hook<
72                 ci::basket_queue::member_hook<
73                     offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
74                     ci::opt::gc<cds::gc::PTB>
75                 >
76             >
77             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
78             ,co::stat< ci::queue_stat<> >
79         > BasketQueue_PTB_member_stat;
80
81         // PTB base hook + alignment
82         typedef ci::BasketQueue< cds::gc::PTB,
83             basket_queue::base_hook_item<cds::gc::PTB>
84             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
85             ,ci::opt::hook<
86                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
87             >
88             ,co::alignment< 32 >
89         > BasketQueue_PTB_base_align;
90
91         // PTB member hook + alignment
92         typedef ci::BasketQueue< cds::gc::PTB,
93             basket_queue::member_hook_item<cds::gc::PTB>
94             ,ci::opt::hook<
95                 ci::basket_queue::member_hook<
96                     offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
97                     ci::opt::gc<cds::gc::PTB>
98                 >
99             >
100             ,co::alignment< 32 >
101             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
102         > BasketQueue_PTB_member_align;
103
104         // PTB base hook + no alignment
105         typedef ci::BasketQueue< cds::gc::PTB,
106             basket_queue::base_hook_item<cds::gc::PTB>
107             ,ci::opt::hook<
108                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
109             >
110             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
111             ,co::alignment< co::no_special_alignment >
112         > BasketQueue_PTB_base_noalign;
113
114         // PTB member hook + no alignment
115         typedef ci::BasketQueue< cds::gc::PTB,
116             basket_queue::member_hook_item<cds::gc::PTB>
117             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
118             ,ci::opt::hook<
119                 ci::basket_queue::member_hook<
120                     offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
121                     ci::opt::gc<cds::gc::PTB>
122                 >
123             >
124             ,co::alignment< co::no_special_alignment >
125         > BasketQueue_PTB_member_noalign;
126
127
128         // PTB base hook + cache alignment
129         typedef ci::BasketQueue< cds::gc::PTB,
130             basket_queue::base_hook_item<cds::gc::PTB>
131             ,ci::opt::hook<
132                 ci::basket_queue::base_hook< ci::opt::gc<cds::gc::PTB> >
133             >
134             ,co::alignment< co::cache_line_alignment >
135             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
136         > BasketQueue_PTB_base_cachealign;
137
138         // PTB member hook + cache alignment
139         typedef ci::BasketQueue< cds::gc::PTB,
140             basket_queue::member_hook_item<cds::gc::PTB>
141             ,ci::opt::hook<
142                 ci::basket_queue::member_hook<
143                     offsetof(basket_queue::member_hook_item<cds::gc::PTB>, hMember),
144                     ci::opt::gc<cds::gc::PTB>
145                 >
146             >
147             ,co::alignment< co::cache_line_alignment >
148             ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
149         > BasketQueue_PTB_member_cachealign;
150
151     }
152
153     TEST(BasketQueue_PTB_base)
154     TEST(BasketQueue_PTB_member)
155     TEST(BasketQueue_PTB_base_ic)
156     TEST(BasketQueue_PTB_member_ic)
157     TEST(BasketQueue_PTB_base_stat)
158     TEST(BasketQueue_PTB_member_stat)
159     TEST(BasketQueue_PTB_base_align)
160     TEST(BasketQueue_PTB_member_align)
161     TEST(BasketQueue_PTB_base_noalign)
162     TEST(BasketQueue_PTB_member_noalign)
163     TEST(BasketQueue_PTB_base_cachealign)
164     TEST(BasketQueue_PTB_member_cachealign)
165 }