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 ,cds::opt::enable_elimination<true>
16 > Elimination_HP_default;
18 typedef cds::intrusive::TreiberStack< cds::gc::HP,
19 TestIntrusiveStack::base_hook_item<cds::gc::HP>
20 ,cds::opt::enable_elimination<true>
21 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
22 > Elimination_HP_default_relaxed;
25 typedef cds::intrusive::TreiberStack< cds::gc::HP,
26 TestIntrusiveStack::base_hook_item<cds::gc::HP>
27 ,cds::opt::enable_elimination<true>
29 ci::single_link::base_hook<
30 ci::opt::gc<cds::gc::HP>
33 > Elimination_HP_base;
35 typedef cds::intrusive::TreiberStack< cds::gc::HP,
36 TestIntrusiveStack::base_hook_item<cds::gc::HP>
37 ,cds::opt::enable_elimination<true>
39 ci::single_link::base_hook<
40 ci::opt::gc<cds::gc::HP>
43 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
44 > Elimination_HP_base_dyn;
46 typedef cds::intrusive::TreiberStack< cds::gc::HP,
47 TestIntrusiveStack::base_hook_item<cds::gc::HP>
48 ,cds::opt::enable_elimination<true>
50 ci::single_link::base_hook<
51 ci::opt::gc<cds::gc::HP>
54 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
55 > Elimination_HP_base_relaxed;
57 // HZP GC + base hook + disposer
58 typedef cds::intrusive::TreiberStack< cds::gc::HP,
59 TestIntrusiveStack::base_hook_item<cds::gc::HP>
60 ,cds::opt::enable_elimination<true>
62 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
64 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
65 > Elimination_HP_base_disposer;
67 typedef cds::intrusive::TreiberStack< cds::gc::HP,
68 TestIntrusiveStack::base_hook_item<cds::gc::HP>
69 ,cds::opt::enable_elimination<true>
71 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
73 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
74 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
75 > Elimination_HP_base_disposer_relaxed;
77 // HZP GC + member hook
78 typedef cds::intrusive::TreiberStack< cds::gc::HP,
79 TestIntrusiveStack::member_hook_item<cds::gc::HP>
80 ,cds::opt::enable_elimination<true>
82 ci::single_link::member_hook<
83 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
84 ci::opt::gc<cds::gc::HP>
87 > Elimination_HP_member;
89 typedef cds::intrusive::TreiberStack< cds::gc::HP,
90 TestIntrusiveStack::member_hook_item<cds::gc::HP>
91 ,cds::opt::enable_elimination<true>
93 ci::single_link::member_hook<
94 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
95 ci::opt::gc<cds::gc::HP>
98 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
99 > Elimination_HP_member_dyn;
101 typedef cds::intrusive::TreiberStack< cds::gc::HP,
102 TestIntrusiveStack::member_hook_item<cds::gc::HP>
103 ,cds::opt::enable_elimination<true>
105 ci::single_link::member_hook<
106 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
107 ci::opt::gc<cds::gc::HP>
110 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
111 > Elimination_HP_member_relaxed;
113 // HZP GC + member hook + disposer
114 typedef cds::intrusive::TreiberStack< cds::gc::HP,
115 TestIntrusiveStack::member_hook_item<cds::gc::HP>
116 ,cds::opt::enable_elimination<true>
118 ci::single_link::member_hook<
119 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
120 ci::opt::gc<cds::gc::HP>
123 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
124 > Elimination_HP_member_disposer;
126 typedef cds::intrusive::TreiberStack< cds::gc::HP,
127 TestIntrusiveStack::member_hook_item<cds::gc::HP>
128 ,cds::opt::enable_elimination<true>
130 ci::single_link::member_hook<
131 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
132 ci::opt::gc<cds::gc::HP>
135 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
136 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
137 > Elimination_HP_member_disposer_relaxed;
140 TEST(Elimination_HP_default)
141 TEST(Elimination_HP_base)
142 TEST_DYN(Elimination_HP_base_dyn)
143 TEST(Elimination_HP_base_disposer)
144 TEST(Elimination_HP_member)
145 TEST_DYN(Elimination_HP_member_dyn)
146 TEST(Elimination_HP_member_disposer)
148 TEST(Elimination_HP_default_relaxed)
149 TEST(Elimination_HP_base_relaxed)
150 TEST(Elimination_HP_base_disposer_relaxed)
151 TEST(Elimination_HP_member_relaxed)
152 TEST(Elimination_HP_member_disposer_relaxed)