Merge pull request #28 from Rapotkinnik/upstream
[libcds.git] / tests / test-hdr / stack / hdr_intrusive_treiber_stack_dhp.cpp
1 //$$CDS-header$$
2
3 #include "hdr_intrusive_treiber_stack.h"
4 #include <cds/gc/dhp.h>
5 #include <cds/intrusive/treiber_stack.h>
6
7 namespace stack {
8
9 #define TEST(X)     void TestIntrusiveStack::X() { test<defs::X>(); }
10
11     namespace defs {
12         // DHP GC + base hook
13         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
14             TestIntrusiveStack::base_hook_item<cds::gc::DHP>
15             ,typename ci::treiber_stack::make_traits<
16                 ci::opt::hook<
17                     ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
18                 >
19             >::type
20         > Treiber_DHP_base;
21
22         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
23             TestIntrusiveStack::base_hook_item<cds::gc::DHP>
24             ,typename ci::treiber_stack::make_traits<
25                 ci::opt::hook<
26                     ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
27                 >
28                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
29             >::type
30         > Treiber_DHP_base_relaxed;
31
32         // DHP GC + base hook + disposer
33         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
34             TestIntrusiveStack::base_hook_item<cds::gc::DHP>
35             ,typename ci::treiber_stack::make_traits<
36                 ci::opt::hook<
37                     ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
38                 >
39                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
40             >::type
41         > Treiber_DHP_base_disposer;
42
43         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
44             TestIntrusiveStack::base_hook_item<cds::gc::DHP>
45             ,typename ci::treiber_stack::make_traits<
46                 ci::opt::hook<
47                     ci::treiber_stack::base_hook< ci::opt::gc<cds::gc::DHP> >
48                 >
49                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
50                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
51             >::type
52         > Treiber_DHP_base_disposer_relaxed;
53
54         // DHP GC + member hook
55         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
56             TestIntrusiveStack::member_hook_item<cds::gc::DHP>
57             ,typename ci::treiber_stack::make_traits<
58                 ci::opt::hook<
59                     ci::treiber_stack::member_hook<
60                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
61                         ci::opt::gc<cds::gc::DHP>
62                     >
63                 >
64             >::type
65         > Treiber_DHP_member;
66
67         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
68             TestIntrusiveStack::member_hook_item<cds::gc::DHP>
69             ,typename ci::treiber_stack::make_traits<
70                 ci::opt::hook<
71                     ci::treiber_stack::member_hook<
72                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
73                         ci::opt::gc<cds::gc::DHP>
74                     >
75                 >
76                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
77             >::type
78         > Treiber_DHP_member_relaxed;
79
80         // DHP GC + member hook + disposer
81         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
82             TestIntrusiveStack::member_hook_item<cds::gc::DHP>
83             , typename ci::treiber_stack::make_traits<
84                 ci::opt::hook<
85                     ci::treiber_stack::member_hook<
86                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
87                         ci::opt::gc<cds::gc::DHP>
88                     >
89                 >
90                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
91             >::type
92         > Treiber_DHP_member_disposer;
93
94         typedef cds::intrusive::TreiberStack< cds::gc::DHP,
95             TestIntrusiveStack::member_hook_item<cds::gc::DHP>
96             , typename ci::treiber_stack::make_traits<
97                 ci::opt::hook<
98                     ci::treiber_stack::member_hook<
99                         offsetof(TestIntrusiveStack::member_hook_item<cds::gc::DHP>, hMember),
100                         ci::opt::gc<cds::gc::DHP>
101                     >
102                 >
103                 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
104                 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
105             >::type
106         > Treiber_DHP_member_disposer_relaxed;
107     }
108
109     TEST(Treiber_DHP_base)
110     TEST(Treiber_DHP_base_disposer)
111     TEST(Treiber_DHP_member)
112     TEST(Treiber_DHP_member_disposer)
113
114     TEST(Treiber_DHP_base_relaxed)
115     TEST(Treiber_DHP_base_disposer_relaxed)
116     TEST(Treiber_DHP_member_relaxed)
117     TEST(Treiber_DHP_member_disposer_relaxed)
118
119 } // namespace stack
120