Remove trailing spaces
[libcds.git] / tests / test-hdr / queue / hdr_intrusive_optimisticqueue_hp.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_msqueue.h"
4 #include <cds/gc/hp.h>
5 #include <cds/intrusive/optimistic_queue.h>
6
7 namespace queue {
8
9 #define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
10
11     namespace {
12         struct base_hook_item: public ci::optimistic_queue::node< cds::gc::HP >
13         {
14             int nVal;
15             int nDisposeCount;
16
17             base_hook_item()
18                 : nDisposeCount(0)
19             {}
20         };
21
22         struct member_hook_item
23         {
24             int nVal;
25             int nDisposeCount;
26             ci::optimistic_queue::node< cds::gc::HP > hMember;
27
28             member_hook_item()
29                 : nDisposeCount(0)
30             {}
31         };
32
33         struct traits_OptimisticQueue_HP_default : public ci::optimistic_queue::traits
34         {
35             typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
36         };
37         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default > OptimisticQueue_HP_default;
38
39         /// HP + item counter
40         struct traits_OptimisticQueue_HP_default_ic : public traits_OptimisticQueue_HP_default
41         {
42             typedef cds::atomicity::item_counter item_counter;
43         };
44         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default_ic > OptimisticQueue_HP_default_ic;
45
46         /// HP + stat
47         struct traits_OptimisticQueue_HP_default_stat : public
48             ci::optimistic_queue::make_traits <
49                 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
50                 , co::stat< ci::optimistic_queue::stat<> >
51                 , co::memory_model< co::v::sequential_consistent >
52             > ::type
53         {};
54         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default_stat > OptimisticQueue_HP_default_stat;
55
56         // HP base hook
57         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
58             typename ci::optimistic_queue::make_traits<
59                 ci::opt::hook<
60                     ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
61                 >
62                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
63                 ,co::memory_model< co::v::relaxed_ordering >
64             >::type
65         > OptimisticQueue_HP_base;
66
67         // HP member hook
68         struct traits_OptimisticQueue_HP_member : public OptimisticQueue_HP_base::traits
69         {
70             typedef ci::optimistic_queue::member_hook <
71                 offsetof( member_hook_item, hMember ),
72                 ci::opt::gc < cds::gc::HP >
73             > hook;
74         };
75         typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item, traits_OptimisticQueue_HP_member > OptimisticQueue_HP_member;
76
77         /// HP base hook + item counter
78         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
79             typename ci::optimistic_queue::make_traits<
80                 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
81                 ,ci::opt::hook<
82                     ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
83                 >
84                 ,co::item_counter< cds::atomicity::item_counter >
85             >::type
86         > OptimisticQueue_HP_base_ic;
87
88         // HP member hook + item counter
89         typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
90             typename ci::optimistic_queue::make_traits<
91                 cds::opt::type_traits< traits_OptimisticQueue_HP_member >
92                 ,co::item_counter< cds::atomicity::item_counter >
93             >::type
94        > OptimisticQueue_HP_member_ic;
95
96         // HP base hook + stat
97         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
98             typename ci::optimistic_queue::make_traits<
99                 ci::opt::hook<
100                     ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
101                 >
102                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
103                 ,co::stat< ci::optimistic_queue::stat<> >
104             >::type
105         > OptimisticQueue_HP_base_stat;
106
107         // HP member hook + stat
108         typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
109             typename ci::optimistic_queue::make_traits<
110                 cds::opt::type_traits< OptimisticQueue_HP_base_stat::traits >
111                 , ci::opt::hook<
112                     ci::optimistic_queue::member_hook<
113                         offsetof(member_hook_item, hMember),
114                         ci::opt::gc<cds::gc::HP>
115                     >
116                 >
117             >::type
118         > OptimisticQueue_HP_member_stat;
119
120         // HP base hook + alignment
121         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
122             typename ci::optimistic_queue::make_traits<
123                 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
124                 ,ci::opt::hook<
125                     ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
126                 >
127                 ,co::alignment< 32 >
128             >::type
129         > OptimisticQueue_HP_base_align;
130
131         // HP member hook + alignment
132         typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
133             typename ci::optimistic_queue::make_traits<
134                 ci::opt::hook<
135                     ci::optimistic_queue::member_hook<
136                         offsetof(member_hook_item, hMember),
137                         ci::opt::gc<cds::gc::HP>
138                     >
139                 >
140                 ,co::alignment< 32 >
141                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
142             >::type
143         > OptimisticQueue_HP_member_align;
144
145         // HP base hook + no alignment
146         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
147             typename ci::optimistic_queue::make_traits<
148                 ci::opt::hook<
149                     ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
150                 >
151                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
152                 ,co::alignment< co::no_special_alignment >
153             >::type
154         > OptimisticQueue_HP_base_noalign;
155
156         // HP member hook + no alignment
157         typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
158             typename ci::optimistic_queue::make_traits<
159                 ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
160                 ,ci::opt::hook<
161                     ci::optimistic_queue::member_hook<
162                         offsetof(member_hook_item, hMember),
163                         ci::opt::gc<cds::gc::HP>
164                     >
165                 >
166                 ,co::alignment< co::no_special_alignment >
167             >::type
168         > OptimisticQueue_HP_member_noalign;
169
170
171         // HP base hook + cache alignment
172         typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
173             typename ci::optimistic_queue::make_traits<
174                 ci::opt::hook<
175                     ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
176                 >
177                 ,co::alignment< co::cache_line_alignment >
178                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
179             >::type
180         > OptimisticQueue_HP_base_cachealign;
181
182         // HP member hook + cache alignment
183         typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
184             typename ci::optimistic_queue::make_traits<
185                 ci::opt::hook<
186                     ci::optimistic_queue::member_hook<
187                         offsetof(member_hook_item, hMember),
188                         ci::opt::gc<cds::gc::HP>
189                     >
190                 >
191                 ,co::alignment< co::cache_line_alignment >
192                 ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
193             >::type
194         > OptimisticQueue_HP_member_cachealign;
195     }
196
197     TEST(OptimisticQueue_HP_default)
198     TEST(OptimisticQueue_HP_default_ic)
199     TEST(OptimisticQueue_HP_default_stat)
200     TEST(OptimisticQueue_HP_base)
201     TEST(OptimisticQueue_HP_member)
202     TEST(OptimisticQueue_HP_base_ic)
203     TEST(OptimisticQueue_HP_member_ic)
204     TEST(OptimisticQueue_HP_base_stat)
205     TEST(OptimisticQueue_HP_member_stat)
206     TEST(OptimisticQueue_HP_base_align)
207     TEST(OptimisticQueue_HP_member_align)
208     TEST(OptimisticQueue_HP_base_noalign)
209     TEST(OptimisticQueue_HP_member_noalign)
210     TEST(OptimisticQueue_HP_base_cachealign)
211     TEST(OptimisticQueue_HP_member_cachealign)
212 }