Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / set / hdr_intrusive_splitlist_set_hp_lazy.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_intrusive_set.h"
4 #include <cds/intrusive/lazy_list_hp.h>
5 #include <cds/intrusive/split_list.h>
6
7 namespace set {
8
9     void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmp_lazy()
10     {
11         typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
12         typedef ci::LazyList< cds::gc::HP
13             ,item
14             ,ci::lazy_list::make_traits<
15                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
16                 ,co::compare< cmp<item> >
17                 ,ci::opt::disposer< faked_disposer >
18                 ,ci::opt::back_off< cds::backoff::empty >
19             >::type
20         >    ord_list;
21
22         typedef ci::SplitListSet< cds::gc::HP, ord_list,
23             ci::split_list::make_traits<
24                 co::hash< hash_int >
25                 ,ci::split_list::dynamic_bucket_table<true>
26                 ,co::memory_model<co::v::relaxed_ordering>
27             >::type
28         > set;
29         static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
30
31         test_int<set>();
32     }
33
34     void IntrusiveHashSetHdrTest::split_dyn_HP_base_less_lazy()
35     {
36         typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
37         typedef ci::LazyList< cds::gc::HP
38             ,item
39             ,ci::lazy_list::make_traits<
40                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
41                 ,co::less< less<item> >
42                 ,ci::opt::disposer< faked_disposer >
43             >::type
44         >    ord_list;
45
46         typedef ci::SplitListSet< cds::gc::HP, ord_list,
47             ci::split_list::make_traits<
48                 co::hash< hash_int >
49                 ,co::memory_model<co::v::sequential_consistent>
50             >::type
51         > set;
52         static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
53
54         test_int<set>();
55     }
56
57     void IntrusiveHashSetHdrTest::split_dyn_HP_base_cmpmix_lazy()
58     {
59         typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
60         typedef ci::LazyList< cds::gc::HP
61             ,item
62             ,ci::lazy_list::make_traits<
63                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
64                 ,co::less< less<item> >
65                 ,co::compare< cmp<item> >
66                 ,ci::opt::disposer< faked_disposer >
67             >::type
68         >    ord_list;
69
70         typedef ci::SplitListSet< cds::gc::HP, ord_list,
71             ci::split_list::make_traits<
72                 co::hash< hash_int >
73                 ,co::item_counter< simple_item_counter >
74                 ,ci::split_list::dynamic_bucket_table<true>
75             >::type
76         > set;
77         static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
78
79         test_int<set>();
80     }
81
82     void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmp_lazy()
83     {
84         typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
85         typedef ci::LazyList< cds::gc::HP
86             ,item
87             ,ci::lazy_list::make_traits<
88                 ci::opt::hook< ci::lazy_list::member_hook<
89                     offsetof( item, hMember ),
90                     co::gc<cds::gc::HP>
91                 > >
92                 ,co::compare< cmp<item> >
93                 ,ci::opt::disposer< faked_disposer >
94             >::type
95         >    ord_list;
96
97         typedef ci::SplitListSet< cds::gc::HP, ord_list,
98             ci::split_list::make_traits<
99                 co::hash< hash_int >
100                 ,co::memory_model<co::v::relaxed_ordering>
101             >::type
102         > set;
103         static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
104
105         test_int<set>();
106     }
107
108     void IntrusiveHashSetHdrTest::split_dyn_HP_member_less_lazy()
109     {
110         typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
111         typedef ci::LazyList< cds::gc::HP
112             ,item
113             ,ci::lazy_list::make_traits<
114                 ci::opt::hook< ci::lazy_list::member_hook<
115                     offsetof( item, hMember ),
116                     co::gc<cds::gc::HP>
117                 > >
118                 ,co::less< less<item> >
119                 ,ci::opt::disposer< faked_disposer >
120             >::type
121         >    ord_list;
122
123         typedef ci::SplitListSet< cds::gc::HP, ord_list,
124             ci::split_list::make_traits<
125                 co::hash< hash_int >
126                 ,co::memory_model<co::v::sequential_consistent>
127             >::type
128         > set;
129         static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
130
131         test_int<set>();
132     }
133
134     void IntrusiveHashSetHdrTest::split_dyn_HP_member_cmpmix_lazy()
135     {
136         typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
137         typedef ci::LazyList< cds::gc::HP
138             ,item
139             ,ci::lazy_list::make_traits<
140                 ci::opt::hook< ci::lazy_list::member_hook<
141                     offsetof( item, hMember ),
142                     co::gc<cds::gc::HP>
143                 > >
144                 ,co::compare< cmp<item> >
145                 ,co::less< less<item> >
146                 ,ci::opt::disposer< faked_disposer >
147             >::type
148         >    ord_list;
149
150         typedef ci::SplitListSet< cds::gc::HP, ord_list,
151             ci::split_list::make_traits<
152                 co::hash< hash_int >
153                 ,co::item_counter< simple_item_counter >
154             >::type
155         > set;
156         static_assert( set::options::dynamic_bucket_table, "Set has static bucket table" );
157
158         test_int<set>();
159     }
160
161
162     // Static bucket table
163     void IntrusiveHashSetHdrTest::split_st_HP_base_cmp_lazy()
164     {
165         typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
166         typedef ci::LazyList< cds::gc::HP
167             ,item
168             ,ci::lazy_list::make_traits<
169                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
170                 ,co::compare< cmp<item> >
171                 ,ci::opt::disposer< faked_disposer >
172             >::type
173         >    ord_list;
174
175         typedef ci::SplitListSet< cds::gc::HP, ord_list,
176             ci::split_list::make_traits<
177                 co::hash< hash_int >
178                 ,ci::split_list::dynamic_bucket_table<false>
179                 ,co::memory_model<co::v::relaxed_ordering>
180             >::type
181         > set;
182         static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
183
184         test_int<set>();
185     }
186
187     void IntrusiveHashSetHdrTest::split_st_HP_base_less_lazy()
188     {
189         typedef base_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
190         typedef ci::LazyList< cds::gc::HP
191             ,item
192             ,ci::lazy_list::make_traits<
193                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
194                 ,co::less< less<item> >
195                 ,ci::opt::disposer< faked_disposer >
196             >::type
197         >    ord_list;
198
199         typedef ci::SplitListSet< cds::gc::HP, ord_list,
200             ci::split_list::make_traits<
201                 co::hash< hash_int >
202                 ,ci::split_list::dynamic_bucket_table<false>
203                 ,co::memory_model<co::v::sequential_consistent>
204             >::type
205         > set;
206         static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
207
208         test_int<set>();
209     }
210
211     void IntrusiveHashSetHdrTest::split_st_HP_base_cmpmix_lazy()
212     {
213         typedef base_int_item< ci::split_list::node<ci::lazy_list::node<cds::gc::HP> > > item;
214         typedef ci::LazyList< cds::gc::HP
215             ,item
216             ,ci::lazy_list::make_traits<
217                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<cds::gc::HP> > >
218                 ,co::less< less<item> >
219                 ,co::compare< cmp<item> >
220                 ,ci::opt::disposer< faked_disposer >
221             >::type
222         >    ord_list;
223
224         typedef ci::SplitListSet< cds::gc::HP, ord_list,
225             ci::split_list::make_traits<
226                 co::hash< hash_int >
227                 ,co::item_counter< simple_item_counter >
228                 ,ci::split_list::dynamic_bucket_table<false>
229             >::type
230         > set;
231         static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
232
233         test_int<set>();
234     }
235
236     void IntrusiveHashSetHdrTest::split_st_HP_member_cmp_lazy()
237     {
238         typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
239         typedef ci::LazyList< cds::gc::HP
240             ,item
241             ,ci::lazy_list::make_traits<
242                 ci::opt::hook< ci::lazy_list::member_hook<
243                     offsetof( item, hMember ),
244                     co::gc<cds::gc::HP>
245                 > >
246                 ,co::compare< cmp<item> >
247                 ,ci::opt::disposer< faked_disposer >
248             >::type
249         >    ord_list;
250
251         typedef ci::SplitListSet< cds::gc::HP, ord_list,
252             ci::split_list::make_traits<
253                 co::hash< hash_int >
254                 ,ci::split_list::dynamic_bucket_table<false>
255                 ,co::memory_model<co::v::relaxed_ordering>
256             >::type
257         > set;
258         static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
259
260         test_int<set>();
261     }
262
263     void IntrusiveHashSetHdrTest::split_st_HP_member_less_lazy()
264     {
265         typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
266         typedef ci::LazyList< cds::gc::HP
267             ,item
268             ,ci::lazy_list::make_traits<
269                 ci::opt::hook< ci::lazy_list::member_hook<
270                     offsetof( item, hMember ),
271                     co::gc<cds::gc::HP>
272                 > >
273                 ,co::less< less<item> >
274                 ,ci::opt::disposer< faked_disposer >
275             >::type
276         >    ord_list;
277
278         typedef ci::SplitListSet< cds::gc::HP, ord_list,
279             ci::split_list::make_traits<
280                 ci::split_list::dynamic_bucket_table<false>
281                 ,co::hash< hash_int >
282                 ,co::memory_model<co::v::sequential_consistent>
283             >::type
284         > set;
285         static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
286
287         test_int<set>();
288     }
289
290     void IntrusiveHashSetHdrTest::split_st_HP_member_cmpmix_lazy()
291     {
292         typedef member_int_item< ci::split_list::node< ci::lazy_list::node<cds::gc::HP> > > item;
293         typedef ci::LazyList< cds::gc::HP
294             ,item
295             ,ci::lazy_list::make_traits<
296                 ci::opt::hook< ci::lazy_list::member_hook<
297                     offsetof( item, hMember ),
298                     co::gc<cds::gc::HP>
299                 > >
300                 ,co::compare< cmp<item> >
301                 ,co::less< less<item> >
302                 ,ci::opt::disposer< faked_disposer >
303             >::type
304         >    ord_list;
305
306         typedef ci::SplitListSet< cds::gc::HP, ord_list,
307             ci::split_list::make_traits<
308                 co::hash< hash_int >
309                 ,co::item_counter< simple_item_counter >
310                 ,ci::split_list::dynamic_bucket_table<false>
311             >::type
312         > set;
313         static_assert( !set::options::dynamic_bucket_table, "Set has dynamic bucket table" );
314
315         test_int<set>();
316     }
317
318
319 } // namespace set