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