Move libcds 1.6.0 from SVN
[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             ,cds::opt::enable_elimination<true>
16         > Elimination_HP_default;
17
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;
23
24         // HZP GC + base hook
25         typedef cds::intrusive::TreiberStack< cds::gc::HP,
26             TestIntrusiveStack::base_hook_item<cds::gc::HP>
27             ,cds::opt::enable_elimination<true>
28             ,ci::opt::hook<
29                 ci::single_link::base_hook<
30                     ci::opt::gc<cds::gc::HP>
31                 >
32             >
33         > Elimination_HP_base;
34
35         typedef cds::intrusive::TreiberStack< cds::gc::HP,
36             TestIntrusiveStack::base_hook_item<cds::gc::HP>
37             ,cds::opt::enable_elimination<true>
38             ,ci::opt::hook<
39                 ci::single_link::base_hook<
40                     ci::opt::gc<cds::gc::HP>
41                 >
42             >
43             ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
44         > Elimination_HP_base_dyn;
45
46         typedef cds::intrusive::TreiberStack< cds::gc::HP,
47             TestIntrusiveStack::base_hook_item<cds::gc::HP>
48             ,cds::opt::enable_elimination<true>
49             ,ci::opt::hook<
50                 ci::single_link::base_hook<
51                     ci::opt::gc<cds::gc::HP>
52                 >
53             >
54             ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
55         > Elimination_HP_base_relaxed;
56
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>
61             ,ci::opt::hook<
62                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
63             >
64             ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
65         > Elimination_HP_base_disposer;
66
67         typedef cds::intrusive::TreiberStack< cds::gc::HP,
68             TestIntrusiveStack::base_hook_item<cds::gc::HP>
69             ,cds::opt::enable_elimination<true>
70             ,ci::opt::hook<
71                 ci::single_link::base_hook< ci::opt::gc<cds::gc::HP> >
72             >
73             ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
74             ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
75         > Elimination_HP_base_disposer_relaxed;
76
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>
81             ,ci::opt::hook<
82                 ci::single_link::member_hook<
83                     offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
84                     ci::opt::gc<cds::gc::HP>
85                 >
86             >
87         > Elimination_HP_member;
88
89         typedef cds::intrusive::TreiberStack< cds::gc::HP,
90             TestIntrusiveStack::member_hook_item<cds::gc::HP>
91             ,cds::opt::enable_elimination<true>
92             ,ci::opt::hook<
93                 ci::single_link::member_hook<
94                     offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
95                     ci::opt::gc<cds::gc::HP>
96                 >
97             >
98             ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
99         > Elimination_HP_member_dyn;
100
101         typedef cds::intrusive::TreiberStack< cds::gc::HP,
102             TestIntrusiveStack::member_hook_item<cds::gc::HP>
103             ,cds::opt::enable_elimination<true>
104             ,ci::opt::hook<
105                 ci::single_link::member_hook<
106                     offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
107                     ci::opt::gc<cds::gc::HP>
108                 >
109             >
110             ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
111         > Elimination_HP_member_relaxed;
112
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>
117             ,ci::opt::hook<
118                 ci::single_link::member_hook<
119                     offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
120                     ci::opt::gc<cds::gc::HP>
121                 >
122             >
123             ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
124         > Elimination_HP_member_disposer;
125
126         typedef cds::intrusive::TreiberStack< cds::gc::HP,
127             TestIntrusiveStack::member_hook_item<cds::gc::HP>
128             ,cds::opt::enable_elimination<true>
129             ,ci::opt::hook<
130                 ci::single_link::member_hook<
131                     offsetof(TestIntrusiveStack::member_hook_item<cds::gc::HP>, hMember),
132                     ci::opt::gc<cds::gc::HP>
133                 >
134             >
135             ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
136             ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
137         > Elimination_HP_member_disposer_relaxed;
138     }
139
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)
147
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)
153
154 } // namespace stack