Hazard Pointer docfix
[libcds.git] / tests / test-hdr / stack / hdr_intrusive_elimination_stack_hp.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_treiber_stack.h"
4 #include <cds/gc/hp.h>
5 #include <cds/intrusive/treiber_stack.h>
6
7 namespace stack {
8
9 #define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
10 #define TEST_DYN(X)     void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
11
12     namespace defs {
13         typedef cds::intrusive::TreiberStack< cds::gc::HP,
14             TestIntrusiveStack::base_hook_item<cds::gc::HP>
15             , typename ci::treiber_stack::make_traits<
16                 cds::opt::enable_elimination<true>
17             >::type
18         > Elimination_HP_default;
19
20         typedef cds::intrusive::TreiberStack< cds::gc::HP,
21             TestIntrusiveStack::base_hook_item<cds::gc::HP>
22             , typename ci::treiber_stack::make_traits<
23                 cds::opt::enable_elimination<true>
24                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
25             >::type
26         > Elimination_HP_default_relaxed;
27
28         // HZP GC + base hook
29         typedef cds::intrusive::TreiberStack< cds::gc::HP,
30             TestIntrusiveStack::base_hook_item<cds::gc::HP>
31             , typename ci::treiber_stack::make_traits<
32                 cds::opt::enable_elimination<true>
33                 ,ci::opt::hook<
34                     ci::treiber_stack::base_hook<
35                         ci::opt::gc<cds::gc::HP>
36                     >
37                 >
38             >::type
39         > Elimination_HP_base;
40
41         typedef cds::intrusive::TreiberStack< cds::gc::HP,
42             TestIntrusiveStack::base_hook_item<cds::gc::HP>
43             , typename ci::treiber_stack::make_traits<
44                 cds::opt::enable_elimination<true>
45                 ,ci::opt::hook<
46                     ci::treiber_stack::base_hook<
47                         ci::opt::gc<cds::gc::HP>
48                     >
49                 >
50                 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
51             >::type
52         > Elimination_HP_base_dyn;
53
54         typedef cds::intrusive::TreiberStack< cds::gc::HP,
55             TestIntrusiveStack::base_hook_item<cds::gc::HP>
56             , typename ci::treiber_stack::make_traits<
57                 cds::opt::enable_elimination<true>
58                 ,ci::opt::hook<
59                     ci::treiber_stack::base_hook<
60                         ci::opt::gc<cds::gc::HP>
61                     >
62                 >
63                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
64             >::type
65         > Elimination_HP_base_relaxed;
66
67         // HZP GC + base hook + disposer
68         typedef cds::intrusive::TreiberStack< cds::gc::HP,
69             TestIntrusiveStack::base_hook_item<cds::gc::HP>
70             , typename ci::treiber_stack::make_traits<
71                 cds::opt::enable_elimination<true>
72                 ,ci::opt::hook<
73                     ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
74                 >
75                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
76             >::type
77         > Elimination_HP_base_disposer;
78
79         typedef cds::intrusive::TreiberStack< cds::gc::HP,
80             TestIntrusiveStack::base_hook_item<cds::gc::HP>
81             , typename ci::treiber_stack::make_traits<
82                 cds::opt::enable_elimination<true>
83                 ,ci::opt::hook<
84                     ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
85                 >
86                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
87                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
88             >::type
89         > Elimination_HP_base_disposer_relaxed;
90
91         // HZP GC + member hook
92         typedef cds::intrusive::TreiberStack< cds::gc::HP,
93             TestIntrusiveStack::member_hook_item<cds::gc::HP>
94             , typename ci::treiber_stack::make_traits<
95                 cds::opt::enable_elimination<true>
96                 ,ci::opt::hook<
97                     ci::treiber_stack::member_hook<
98                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
99                         ci::opt::gc<cds::gc::HP>
100                     >
101                 >
102             >::type
103         > Elimination_HP_member;
104
105         typedef cds::intrusive::TreiberStack< cds::gc::HP,
106             TestIntrusiveStack::member_hook_item<cds::gc::HP>
107             , typename ci::treiber_stack::make_traits<
108                 cds::opt::enable_elimination<true>
109                 ,ci::opt::hook<
110                     ci::treiber_stack::member_hook<
111                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
112                         ci::opt::gc<cds::gc::HP>
113                     >
114                 >
115                 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
116             >::type
117         > Elimination_HP_member_dyn;
118
119         typedef cds::intrusive::TreiberStack< cds::gc::HP,
120             TestIntrusiveStack::member_hook_item<cds::gc::HP>
121             , typename ci::treiber_stack::make_traits<
122                 cds::opt::enable_elimination<true>
123                 ,ci::opt::hook<
124                     ci::treiber_stack::member_hook<
125                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
126                         ci::opt::gc<cds::gc::HP>
127                     >
128                 >
129                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
130             >::type
131         > Elimination_HP_member_relaxed;
132
133         // HZP GC + member hook + disposer
134         typedef cds::intrusive::TreiberStack< cds::gc::HP,
135             TestIntrusiveStack::member_hook_item<cds::gc::HP>
136             , typename ci::treiber_stack::make_traits<
137                 cds::opt::enable_elimination<true>
138                 ,ci::opt::hook<
139                     ci::treiber_stack::member_hook<
140                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
141                         ci::opt::gc<cds::gc::HP>
142                     >
143                 >
144                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
145             >::type
146         > Elimination_HP_member_disposer;
147
148         typedef cds::intrusive::TreiberStack< cds::gc::HP,
149             TestIntrusiveStack::member_hook_item<cds::gc::HP>
150             , typename ci::treiber_stack::make_traits<
151                 cds::opt::enable_elimination<true>
152                 ,ci::opt::hook<
153                     ci::treiber_stack::member_hook<
154                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
155                         ci::opt::gc<cds::gc::HP>
156                     >
157                 >
158                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
159                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
160             >::type
161         > Elimination_HP_member_disposer_relaxed;
162     }
163
164     TEST(Elimination_HP_default)
165     TEST(Elimination_HP_base)
166     TEST_DYN(Elimination_HP_base_dyn)
167     TEST(Elimination_HP_base_disposer)
168     TEST(Elimination_HP_member)
169     TEST_DYN(Elimination_HP_member_dyn)
170     TEST(Elimination_HP_member_disposer)
171
172     TEST(Elimination_HP_default_relaxed)
173     TEST(Elimination_HP_base_relaxed)
174     TEST(Elimination_HP_base_disposer_relaxed)
175     TEST(Elimination_HP_member_relaxed)
176     TEST(Elimination_HP_member_disposer_relaxed)
177
178 } // namespace stack