3 #include "hdr_intrusive_treiber_stack.h"
4 #include <cds/gc/dhp.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>(); }
14 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
15 TestIntrusiveStack::base_hook_item<cds::gc::DHP>
16 , typename ci::treiber_stack::make_traits<
17 cds::opt::enable_elimination<true>
19 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
22 > Elimination_DHP_base;
24 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
25 TestIntrusiveStack::base_hook_item<cds::gc::DHP>
26 , typename ci::treiber_stack::make_traits<
28 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
30 ,cds::opt::enable_elimination<true>
31 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
33 > Elimination_DHP_base_dyn;
35 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
36 TestIntrusiveStack::base_hook_item<cds::gc::DHP>
37 , typename ci::treiber_stack::make_traits<
39 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
41 ,cds::opt::enable_elimination<true>
42 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
44 > Elimination_DHP_base_relaxed;
46 // DHP GC + base hook + disposer
47 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
48 TestIntrusiveStack::base_hook_item<cds::gc::DHP>
49 , typename ci::treiber_stack::make_traits<
51 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
53 ,cds::opt::enable_elimination<true>
54 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
56 > Elimination_DHP_base_disposer;
58 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
59 TestIntrusiveStack::base_hook_item<cds::gc::DHP>
60 , typename ci::treiber_stack::make_traits<
62 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
64 ,cds::opt::enable_elimination<true>
65 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
66 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
68 > Elimination_DHP_base_disposer_relaxed;
70 // DHP GC + member hook
71 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
72 TestIntrusiveStack::member_hook_item<cds::gc::DHP>
73 , typename ci::treiber_stack::make_traits<
75 ci::treiber_stack::member_hook<
76 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
77 ci::opt::gc<cds::gc::DHP>
80 ,cds::opt::enable_elimination<true>
82 > Elimination_DHP_member;
84 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
85 TestIntrusiveStack::member_hook_item<cds::gc::DHP>
86 , typename ci::treiber_stack::make_traits<
88 ci::treiber_stack::member_hook<
89 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
90 ci::opt::gc<cds::gc::DHP>
93 ,cds::opt::enable_elimination<true>
94 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
96 > Elimination_DHP_member_dyn;
98 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
99 TestIntrusiveStack::member_hook_item<cds::gc::DHP>
100 , typename ci::treiber_stack::make_traits<
102 ci::treiber_stack::member_hook<
103 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
104 ci::opt::gc<cds::gc::DHP>
107 ,cds::opt::enable_elimination<true>
108 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
110 > Elimination_DHP_member_relaxed;
112 // DHP GC + member hook + disposer
113 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
114 TestIntrusiveStack::member_hook_item<cds::gc::DHP>
115 , typename ci::treiber_stack::make_traits<
117 ci::treiber_stack::member_hook<
118 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
119 ci::opt::gc<cds::gc::DHP>
122 ,cds::opt::enable_elimination<true>
123 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
125 > Elimination_DHP_member_disposer;
127 typedef cds::intrusive::TreiberStack< cds::gc::DHP,
128 TestIntrusiveStack::member_hook_item<cds::gc::DHP>
129 , typename ci::treiber_stack::make_traits<
131 ci::treiber_stack::member_hook<
132 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
133 ci::opt::gc<cds::gc::DHP>
136 ,cds::opt::enable_elimination<true>
137 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
138 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
140 > Elimination_DHP_member_disposer_relaxed;
143 TEST(Elimination_DHP_base)
144 TEST_DYN(Elimination_DHP_base_dyn)
145 TEST(Elimination_DHP_base_disposer)
146 TEST(Elimination_DHP_member)
147 TEST_DYN(Elimination_DHP_member_dyn)
148 TEST(Elimination_DHP_member_disposer)
150 TEST(Elimination_DHP_base_relaxed)
151 TEST(Elimination_DHP_base_disposer_relaxed)
152 TEST(Elimination_DHP_member_relaxed)
153 TEST(Elimination_DHP_member_disposer_relaxed)