34415de50daae24bed0a13b378f38f14f49180a0
[libcds.git] / tests / test-hdr / set / hdr_multilevel_hashset_rcu_sht.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_multilevel_hashset.h"
4 #include <cds/urcu/signal_threaded.h>
5 #include <cds/container/multilevel_hashset_rcu.h>
6 #include "unit/print_multilevel_hashset_stat.h"
7
8 namespace set {
9 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
10     namespace {
11         typedef cds::urcu::gc<cds::urcu::signal_threaded<>> rcu_type;
12     } // namespace
13 #endif
14
15     void MultiLevelHashSetHdrTest::rcu_sht_stdhash()
16     {
17 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
18         typedef size_t hash_type;
19
20         struct traits: public cc::multilevel_hashset::traits
21         {
22             typedef get_hash<hash_type> hash_accessor;
23         };
24         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
25         static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
26         test_rcu<set_type, std::hash<hash_type>>(4, 2);
27
28         typedef cc::MultiLevelHashSet<
29             rcu_type,
30             Item<hash_type>,
31             typename cc::multilevel_hashset::make_traits<
32                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
33             >::type
34         > set_type2;
35         test_rcu<set_type2, std::hash<hash_type>>(4, 2);
36 #endif
37     }
38
39     void MultiLevelHashSetHdrTest::rcu_sht_hash128()
40     {
41 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
42         typedef hash128 hash_type;
43
44         struct traits: public cc::multilevel_hashset::traits
45         {
46             typedef get_hash<hash_type> hash_accessor;
47             typedef hash128::less less;
48         };
49         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
50         static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash128!!!" );
51         test_rcu<set_type, hash128::make>(4, 2);
52
53         typedef cc::MultiLevelHashSet<
54             rcu_type,
55             Item<hash_type>,
56             typename cc::multilevel_hashset::make_traits<
57                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
58                 , co::less< hash_type::less >
59             >::type
60         > set_type2;
61         test_rcu<set_type2, hash128::make>(4, 2);
62 #endif
63     }
64
65     void MultiLevelHashSetHdrTest::rcu_sht_stdhash_stat()
66     {
67 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
68         typedef size_t hash_type;
69
70         struct traits: public cc::multilevel_hashset::traits
71         {
72             typedef get_hash<hash_type> hash_accessor;
73             typedef cc::multilevel_hashset::stat<> stat;
74         };
75         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
76         static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
77         test_rcu<set_type, std::hash<hash_type>>(4, 2);
78
79         typedef cc::MultiLevelHashSet<
80             rcu_type,
81             Item<hash_type>,
82             typename cc::multilevel_hashset::make_traits<
83                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
84                 ,co::stat< cc::multilevel_hashset::stat<>>
85             >::type
86         > set_type2;
87         test_rcu<set_type2, std::hash<hash_type>>(4, 2);
88 #endif
89     }
90
91     void MultiLevelHashSetHdrTest::rcu_sht_hash128_stat()
92     {
93 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
94         typedef hash128 hash_type;
95
96         struct traits: public cc::multilevel_hashset::traits
97         {
98             typedef get_hash<hash_type> hash_accessor;
99             typedef hash128::cmp  compare;
100             typedef cc::multilevel_hashset::stat<> stat;
101         };
102         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
103         static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
104         test_rcu<set_type, hash_type::make>(4, 2);
105
106         typedef cc::MultiLevelHashSet<
107             rcu_type,
108             Item<hash_type>,
109             typename cc::multilevel_hashset::make_traits<
110                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
111                 ,co::stat< cc::multilevel_hashset::stat<>>
112                 ,co::compare< hash128::cmp >
113             >::type
114         > set_type2;
115         test_rcu<set_type2, hash_type::make>(4, 2);
116 #endif
117     }
118
119     void MultiLevelHashSetHdrTest::rcu_sht_stdhash_5_3()
120     {
121 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
122         typedef size_t hash_type;
123
124         struct traits: public cc::multilevel_hashset::traits
125         {
126             typedef get_hash<hash_type> hash_accessor;
127         };
128         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
129         static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
130         test_rcu<set_type, std::hash<hash_type>>(5, 3);
131
132         typedef cc::MultiLevelHashSet<
133             rcu_type,
134             Item<hash_type>,
135             typename cc::multilevel_hashset::make_traits<
136                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
137             >::type
138         > set_type2;
139         test_rcu<set_type2, std::hash<hash_type>>(5, 3);
140 #endif
141     }
142
143     void MultiLevelHashSetHdrTest::rcu_sht_hash128_4_3()
144     {
145 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
146         typedef hash128 hash_type;
147
148         struct traits: public cc::multilevel_hashset::traits
149         {
150             typedef get_hash<hash_type> hash_accessor;
151             typedef co::v::sequential_consistent memory_model;
152         };
153         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
154         static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
155         test_rcu<set_type, hash128::make >(4, 3);
156
157         typedef cc::MultiLevelHashSet<
158             rcu_type,
159             Item<hash_type>,
160             typename cc::multilevel_hashset::make_traits<
161                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
162                 ,co::memory_model< co::v::sequential_consistent >
163             >::type
164         > set_type2;
165         test_rcu<set_type2, hash128::make >(4, 3);
166 #endif
167     }
168
169     void MultiLevelHashSetHdrTest::rcu_sht_stdhash_5_3_stat()
170     {
171 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
172         typedef size_t hash_type;
173
174         struct traits: public cc::multilevel_hashset::traits
175         {
176             typedef get_hash<hash_type> hash_accessor;
177             typedef cc::multilevel_hashset::stat<> stat;
178         };
179         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
180         static_assert(std::is_same< typename set_type::hash_type, size_t>::value, "set::hash_type != size_t!!!" );
181         test_rcu<set_type, std::hash<hash_type>>(5, 3);
182
183         typedef cc::MultiLevelHashSet<
184             rcu_type,
185             Item<hash_type>,
186             typename cc::multilevel_hashset::make_traits<
187                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
188                 ,co::stat< cc::multilevel_hashset::stat<>>
189             >::type
190         > set_type2;
191         test_rcu<set_type2, std::hash<hash_type>>(5, 3);
192 #endif
193     }
194
195     void MultiLevelHashSetHdrTest::rcu_sht_hash128_4_3_stat()
196     {
197 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
198         typedef hash128 hash_type;
199
200         struct traits: public cc::multilevel_hashset::traits
201         {
202             typedef get_hash<hash_type> hash_accessor;
203             typedef cc::multilevel_hashset::stat<> stat;
204             typedef hash128::less less;
205             typedef hash128::cmp compare;
206         };
207         typedef cc::MultiLevelHashSet< rcu_type, Item<hash_type>, traits > set_type;
208         static_assert(std::is_same< typename set_type::hash_type, hash_type>::value, "set::hash_type != hash_type!!!" );
209         test_rcu<set_type, hash_type::make>(4, 3);
210
211         typedef cc::MultiLevelHashSet<
212             rcu_type,
213             Item<hash_type>,
214             typename cc::multilevel_hashset::make_traits<
215                 cc::multilevel_hashset::hash_accessor< get_hash<hash_type>>
216                 , co::stat< cc::multilevel_hashset::stat<>>
217                 , co::less< hash_type::less >
218                 , co::compare< hash128::cmp >
219             >::type
220         > set_type2;
221         test_rcu<set_type2, hash_type::make>(4, 3);
222 #endif
223     }
224 } // namespace set