3 #include "cppunit/cppunit_proxy.h"
4 #include <cds/intrusive/single_link_struct.h>
8 namespace ci = cds::intrusive;
10 class TestIntrusiveStack: public CppUnitMini::TestCase
13 template <typename GC>
14 struct base_hook_item: public ci::single_link::node< GC >
24 template <typename GC>
25 struct member_hook_item
29 ci::single_link::node< GC > hMember;
39 void operator ()( T * p )
45 template <class Stack>
46 void test_elimination()
52 template <class Stack>
60 template <class Stack>
61 void test_with( Stack& stack )
63 typedef typename Stack::value_type value_type;
65 CPPUNIT_ASSERT( stack.empty() );
67 value_type v1, v2, v3;
71 CPPUNIT_ASSERT( stack.push(v1));
72 CPPUNIT_ASSERT( !stack.empty() );
73 CPPUNIT_ASSERT( stack.push(v2));
74 CPPUNIT_ASSERT( !stack.empty() );
75 CPPUNIT_ASSERT( stack.push(v3));
76 CPPUNIT_ASSERT( !stack.empty() );
80 CPPUNIT_ASSERT( pv != NULL );
81 CPPUNIT_ASSERT( pv->nVal == 3 );
82 CPPUNIT_ASSERT( !stack.empty() );
84 CPPUNIT_ASSERT( pv != NULL );
85 CPPUNIT_ASSERT( pv->nVal == 2 );
86 CPPUNIT_ASSERT( !stack.empty() );
88 CPPUNIT_ASSERT( pv != NULL );
89 CPPUNIT_ASSERT( pv->nVal == 1 );
90 CPPUNIT_ASSERT( stack.empty() );
92 CPPUNIT_ASSERT( pv == NULL );
94 CPPUNIT_ASSERT( v1.nDisposeCount == 0 );
95 CPPUNIT_ASSERT( v2.nDisposeCount == 0 );
96 CPPUNIT_ASSERT( v3.nDisposeCount == 0 );
103 CPPUNIT_ASSERT( stack.empty() );
106 if ( !std::is_same<typename Stack::disposer, ci::opt::v::empty_disposer>::value ) {
107 CPPUNIT_ASSERT( v1.nDisposeCount == 1 );
108 CPPUNIT_ASSERT( v2.nDisposeCount == 1 );
109 CPPUNIT_ASSERT( v3.nDisposeCount == 1 );
113 void Treiber_HP_default();
114 void Treiber_HP_base();
115 void Treiber_HP_base_disposer();
116 void Treiber_HP_member();
117 void Treiber_HP_member_disposer();
118 void Treiber_HRC_base();
119 void Treiber_HRC_base_disposer();
120 void Treiber_PTB_base();
121 void Treiber_PTB_base_disposer();
122 void Treiber_PTB_member();
123 void Treiber_PTB_member_disposer();
125 void Treiber_HP_default_relaxed();
126 void Treiber_HP_base_relaxed();
127 void Treiber_HP_base_disposer_relaxed();
128 void Treiber_HP_member_relaxed();
129 void Treiber_HP_member_disposer_relaxed();
130 void Treiber_HRC_base_relaxed();
131 void Treiber_HRC_base_disposer_relaxed();
132 void Treiber_PTB_base_relaxed();
133 void Treiber_PTB_base_disposer_relaxed();
134 void Treiber_PTB_member_relaxed();
135 void Treiber_PTB_member_disposer_relaxed();
137 void Elimination_HP_default();
138 void Elimination_HP_base();
139 void Elimination_HP_base_dyn();
140 void Elimination_HP_base_disposer();
141 void Elimination_HP_member();
142 void Elimination_HP_member_dyn();
143 void Elimination_HP_member_disposer();
144 void Elimination_HRC_base();
145 void Elimination_HRC_base_dyn();
146 void Elimination_HRC_base_disposer();
147 void Elimination_PTB_base();
148 void Elimination_PTB_base_dyn();
149 void Elimination_PTB_base_disposer();
150 void Elimination_PTB_member();
151 void Elimination_PTB_member_dyn();
152 void Elimination_PTB_member_disposer();
154 void Elimination_HP_default_relaxed();
155 void Elimination_HP_base_relaxed();
156 void Elimination_HP_base_disposer_relaxed();
157 void Elimination_HP_member_relaxed();
158 void Elimination_HP_member_disposer_relaxed();
159 void Elimination_HRC_base_relaxed();
160 void Elimination_HRC_base_disposer_relaxed();
161 void Elimination_PTB_base_relaxed();
162 void Elimination_PTB_base_disposer_relaxed();
163 void Elimination_PTB_member_relaxed();
164 void Elimination_PTB_member_disposer_relaxed();
166 CPPUNIT_TEST_SUITE(TestIntrusiveStack)
167 CPPUNIT_TEST(Treiber_HP_default)
168 CPPUNIT_TEST(Treiber_HP_default_relaxed)
169 CPPUNIT_TEST(Treiber_HP_base)
170 CPPUNIT_TEST(Treiber_HP_base_relaxed)
171 CPPUNIT_TEST(Treiber_HP_base_disposer)
172 CPPUNIT_TEST(Treiber_HP_base_disposer_relaxed)
173 CPPUNIT_TEST(Treiber_HP_member)
174 CPPUNIT_TEST(Treiber_HP_member_relaxed)
175 CPPUNIT_TEST(Treiber_HP_member_disposer)
176 CPPUNIT_TEST(Treiber_HP_member_disposer_relaxed)
177 CPPUNIT_TEST(Treiber_HRC_base)
178 CPPUNIT_TEST(Treiber_HRC_base_relaxed)
179 CPPUNIT_TEST(Treiber_HRC_base_disposer)
180 CPPUNIT_TEST(Treiber_HRC_base_disposer_relaxed)
181 CPPUNIT_TEST(Treiber_PTB_base)
182 CPPUNIT_TEST(Treiber_PTB_base_relaxed)
183 CPPUNIT_TEST(Treiber_PTB_base_disposer)
184 CPPUNIT_TEST(Treiber_PTB_base_disposer_relaxed)
185 CPPUNIT_TEST(Treiber_PTB_member)
186 CPPUNIT_TEST(Treiber_PTB_member_relaxed)
187 CPPUNIT_TEST(Treiber_PTB_member_disposer)
188 CPPUNIT_TEST(Treiber_PTB_member_disposer_relaxed)
190 CPPUNIT_TEST(Elimination_HP_default)
191 CPPUNIT_TEST(Elimination_HP_default_relaxed)
192 CPPUNIT_TEST(Elimination_HP_base)
193 CPPUNIT_TEST(Elimination_HP_base_dyn)
194 CPPUNIT_TEST(Elimination_HP_base_relaxed)
195 CPPUNIT_TEST(Elimination_HP_base_disposer)
196 CPPUNIT_TEST(Elimination_HP_base_disposer_relaxed)
197 CPPUNIT_TEST(Elimination_HP_member)
198 CPPUNIT_TEST(Elimination_HP_member_dyn)
199 CPPUNIT_TEST(Elimination_HP_member_relaxed)
200 CPPUNIT_TEST(Elimination_HP_member_disposer)
201 CPPUNIT_TEST(Elimination_HP_member_disposer_relaxed)
202 CPPUNIT_TEST(Elimination_HRC_base)
203 CPPUNIT_TEST(Elimination_HRC_base_dyn)
204 CPPUNIT_TEST(Elimination_HRC_base_relaxed)
205 CPPUNIT_TEST(Elimination_HRC_base_disposer)
206 CPPUNIT_TEST(Elimination_HRC_base_disposer_relaxed)
207 CPPUNIT_TEST(Elimination_PTB_base)
208 CPPUNIT_TEST(Elimination_PTB_base_dyn)
209 CPPUNIT_TEST(Elimination_PTB_base_relaxed)
210 CPPUNIT_TEST(Elimination_PTB_base_disposer)
211 CPPUNIT_TEST(Elimination_PTB_base_disposer_relaxed)
212 CPPUNIT_TEST(Elimination_PTB_member)
213 CPPUNIT_TEST(Elimination_PTB_member_dyn)
214 CPPUNIT_TEST(Elimination_PTB_member_relaxed)
215 CPPUNIT_TEST(Elimination_PTB_member_disposer)
216 CPPUNIT_TEST(Elimination_PTB_member_disposer_relaxed)
217 CPPUNIT_TEST_SUITE_END()