3 #include "hdr_intrusive_treiber_stack.h"
5 #include <cds/intrusive/treiber_stack.h>
9 #define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
10 #define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
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>
18 > Elimination_HP_default;
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 >
26 > Elimination_HP_default_relaxed;
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>
34 ci::treiber_stack::base_hook<
35 ci::opt::gc<cds::gc::HP>
39 > Elimination_HP_base;
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>
46 ci::treiber_stack::base_hook<
47 ci::opt::gc<cds::gc::HP>
50 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
52 > Elimination_HP_base_dyn;
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>
59 ci::treiber_stack::base_hook<
60 ci::opt::gc<cds::gc::HP>
63 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
65 > Elimination_HP_base_relaxed;
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>
73 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
75 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
77 > Elimination_HP_base_disposer;
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>
84 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
86 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
87 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
89 > Elimination_HP_base_disposer_relaxed;
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>
97 ci::treiber_stack::member_hook<
98 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
99 ci::opt::gc<cds::gc::HP>
103 > Elimination_HP_member;
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>
110 ci::treiber_stack::member_hook<
111 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
112 ci::opt::gc<cds::gc::HP>
115 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
117 > Elimination_HP_member_dyn;
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>
124 ci::treiber_stack::member_hook<
125 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
126 ci::opt::gc<cds::gc::HP>
129 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
131 > Elimination_HP_member_relaxed;
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>
139 ci::treiber_stack::member_hook<
140 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
141 ci::opt::gc<cds::gc::HP>
144 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
146 > Elimination_HP_member_disposer;
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>
153 ci::treiber_stack::member_hook<
154 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
155 ci::opt::gc<cds::gc::HP>
158 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
159 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
161 > Elimination_HP_member_disposer_relaxed;
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)
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)