bugfix in cds::gc::HP::guarded_ptr
[libcds.git] / tests / test-hdr / set / hdr_intrusive_michael_set_rcu_gpi_lazy.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_intrusive_set.h"
4 #include <cds/urcu/general_instant.h>
5 #include <cds/intrusive/lazy_list_rcu.h>
6 #include <cds/intrusive/michael_set_rcu.h>
7
8 namespace set {
9     namespace {
10         typedef cds::urcu::gc< cds::urcu::general_instant<> >   RCU;
11     }
12
13     void IntrusiveHashSetHdrTest::RCU_GPI_base_cmp_lazy()
14     {
15         typedef base_int_item< ci::lazy_list::node<RCU> > item;
16         struct list_traits :
17             public ci::lazy_list::make_traits<
18                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
19                 ,co::compare< cmp<item> >
20                 ,ci::opt::disposer< faked_disposer >
21                 ,ci::opt::back_off< cds::backoff::pause >
22             >::type
23         {};
24
25         typedef ci::LazyList< RCU, item, list_traits >    bucket_type;
26
27         struct set_traits : public ci::michael_set::traits
28         {
29             typedef hash_int hash;
30         };
31         typedef ci::MichaelHashSet< RCU, bucket_type, set_traits > set;
32
33         test_rcu_int<set>();
34     }
35
36     void IntrusiveHashSetHdrTest::RCU_GPI_base_less_lazy()
37     {
38         typedef base_int_item< ci::lazy_list::node<RCU> > item;
39         typedef ci::LazyList< RCU
40             ,item
41             ,ci::lazy_list::make_traits<
42                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
43                 ,co::less< less<item> >
44                 ,ci::opt::disposer< faked_disposer >
45             >::type
46         >    bucket_type;
47
48         typedef ci::MichaelHashSet< RCU, bucket_type,
49             ci::michael_set::make_traits<
50                 co::hash< hash_int >
51             >::type
52         > set;
53
54         test_rcu_int<set>();
55     }
56
57     void IntrusiveHashSetHdrTest::RCU_GPI_base_cmpmix_lazy()
58     {
59         typedef base_int_item< ci::lazy_list::node<RCU> > item;
60         typedef ci::LazyList< RCU
61             ,item
62             ,ci::lazy_list::make_traits<
63                 ci::opt::hook< ci::lazy_list::base_hook< co::gc<RCU> > >
64                 ,co::less< less<item> >
65                 ,co::compare< cmp<item> >
66                 ,ci::opt::disposer< faked_disposer >
67             >::type
68         >    bucket_type;
69
70         typedef ci::MichaelHashSet< RCU, bucket_type,
71             ci::michael_set::make_traits<
72                 co::hash< hash_int >
73                 ,co::item_counter< simple_item_counter >
74             >::type
75         > set;
76
77         test_rcu_int<set>();
78     }
79
80     void IntrusiveHashSetHdrTest::RCU_GPI_member_cmp_lazy()
81     {
82         typedef member_int_item< ci::lazy_list::node<RCU> > item;
83         typedef ci::LazyList< RCU
84             ,item
85             ,ci::lazy_list::make_traits<
86                 ci::opt::hook< ci::lazy_list::member_hook<
87                     offsetof( item, hMember ),
88                     co::gc<RCU>
89                 > >
90                 ,co::compare< cmp<item> >
91                 ,ci::opt::disposer< faked_disposer >
92             >::type
93         >    bucket_type;
94
95         typedef ci::MichaelHashSet< RCU, bucket_type,
96             ci::michael_set::make_traits<
97                 co::hash< hash_int >
98             >::type
99         > set;
100
101         test_rcu_int<set>();
102     }
103
104     void IntrusiveHashSetHdrTest::RCU_GPI_member_less_lazy()
105     {
106         typedef member_int_item< ci::lazy_list::node<RCU> > item;
107         typedef ci::LazyList< RCU
108             ,item
109             ,ci::lazy_list::make_traits<
110                 ci::opt::hook< ci::lazy_list::member_hook<
111                     offsetof( item, hMember ),
112                     co::gc<RCU>
113                 > >
114                 ,co::less< less<item> >
115                 ,ci::opt::disposer< faked_disposer >
116             >::type
117         >    bucket_type;
118
119         typedef ci::MichaelHashSet< RCU, bucket_type,
120             ci::michael_set::make_traits<
121                 co::hash< hash_int >
122             >::type
123         > set;
124
125         test_rcu_int<set>();
126     }
127
128     void IntrusiveHashSetHdrTest::RCU_GPI_member_cmpmix_lazy()
129     {
130         typedef member_int_item< ci::lazy_list::node<RCU> > item;
131         typedef ci::LazyList< RCU
132             ,item
133             ,ci::lazy_list::make_traits<
134                 ci::opt::hook< ci::lazy_list::member_hook<
135                     offsetof( item, hMember ),
136                     co::gc<RCU>
137                 > >
138                 ,co::compare< cmp<item> >
139                 ,co::less< less<item> >
140                 ,ci::opt::disposer< faked_disposer >
141             >::type
142         >    bucket_type;
143
144         typedef ci::MichaelHashSet< RCU, bucket_type,
145             ci::michael_set::make_traits<
146                 co::hash< hash_int >
147                 ,co::item_counter< simple_item_counter >
148             >::type
149         > set;
150
151         test_rcu_int<set>();
152     }
153
154
155 } // namespace set