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