3 #include "hdr_intrusive_treiber_stack.h"
5 #include <cds/intrusive/treiber_stack.h>
9 #define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
11 namespace defs { namespace {
12 typedef cds::intrusive::TreiberStack< cds::gc::HP,
13 TestIntrusiveStack::base_hook_item<cds::gc::HP>
16 typedef cds::intrusive::TreiberStack< cds::gc::HP,
17 TestIntrusiveStack::base_hook_item<cds::gc::HP>
18 , typename ci::treiber_stack::make_traits<
19 ci::opt::memory_model< ci::opt::v::relaxed_ordering >
21 > Treiber_HP_default_relaxed;
24 typedef cds::intrusive::TreiberStack< cds::gc::HP,
25 TestIntrusiveStack::base_hook_item<cds::gc::HP>
26 , typename ci::treiber_stack::make_traits<
28 ci::treiber_stack::base_hook<
29 ci::opt::gc<cds::gc::HP>
35 struct traits_Treiber_HP_base_relaxed
36 : ci::treiber_stack::make_traits <
38 ci::treiber_stack::base_hook<
39 ci::opt::gc<cds::gc::HP>
42 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
45 typedef cds::intrusive::TreiberStack< cds::gc::HP,
46 TestIntrusiveStack::base_hook_item<cds::gc::HP>,
47 traits_Treiber_HP_base_relaxed
48 > Treiber_HP_base_relaxed;
50 // HZP GC + base hook + disposer
51 struct traits_Treiber_HP_base_disposer
52 : ci::treiber_stack::make_traits <
54 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
56 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
59 typedef cds::intrusive::TreiberStack< cds::gc::HP,
60 TestIntrusiveStack::base_hook_item<cds::gc::HP>,
61 traits_Treiber_HP_base_disposer
62 > Treiber_HP_base_disposer;
64 typedef cds::intrusive::TreiberStack< cds::gc::HP,
65 TestIntrusiveStack::base_hook_item<cds::gc::HP>
66 ,typename ci::treiber_stack::make_traits <
68 ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::HP> >
70 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
71 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
73 > Treiber_HP_base_disposer_relaxed;
75 // HZP GC + member hook
76 struct traits_Treiber_HP_member
77 : ci::treiber_stack::make_traits <
79 ci::treiber_stack::member_hook<
80 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
81 ci::opt::gc<cds::gc::HP>
86 typedef cds::intrusive::TreiberStack< cds::gc::HP,
87 TestIntrusiveStack::member_hook_item<cds::gc::HP>,
88 traits_Treiber_HP_member
91 struct traits_Treiber_HP_member_relaxed
92 : ci::treiber_stack::make_traits <
94 ci::treiber_stack::member_hook<
95 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
96 ci::opt::gc<cds::gc::HP>
99 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
102 typedef cds::intrusive::TreiberStack< cds::gc::HP,
103 TestIntrusiveStack::member_hook_item<cds::gc::HP>,
104 traits_Treiber_HP_member_relaxed
105 > Treiber_HP_member_relaxed;
107 // HZP GC + member hook + disposer
108 struct traits_Treiber_HP_member_disposer
109 : ci::treiber_stack::make_traits <
111 ci::treiber_stack::member_hook<
112 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
113 ci::opt::gc<cds::gc::HP>
116 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
119 typedef cds::intrusive::TreiberStack< cds::gc::HP,
120 TestIntrusiveStack::member_hook_item<cds::gc::HP>,
121 traits_Treiber_HP_member_disposer
122 > Treiber_HP_member_disposer;
124 struct traits_Treiber_HP_member_disposer_relaxed
125 : ci::treiber_stack::make_traits <
127 ci::treiber_stack::member_hook<
128 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
129 ci::opt::gc<cds::gc::HP>
132 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
133 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
136 typedef cds::intrusive::TreiberStack< cds::gc::HP,
137 TestIntrusiveStack::member_hook_item<cds::gc::HP>,
138 traits_Treiber_HP_member_disposer_relaxed
139 > Treiber_HP_member_disposer_relaxed;
142 TEST(Treiber_HP_default)
143 TEST(Treiber_HP_base)
144 TEST(Treiber_HP_base_disposer)
145 TEST(Treiber_HP_member)
146 TEST(Treiber_HP_member_disposer)
148 TEST(Treiber_HP_default_relaxed)
149 TEST(Treiber_HP_base_relaxed)
150 TEST(Treiber_HP_base_disposer_relaxed)
151 TEST(Treiber_HP_member_relaxed)
152 TEST(Treiber_HP_member_disposer_relaxed)
156 CPPUNIT_TEST_SUITE_REGISTRATION(stack::TestIntrusiveStack);