Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / set / hdr_intrusive_striped_hashset_slist.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_intrusive_striped_set.h"
4 #include <cds/intrusive/striped_set/boost_slist.h>
5 #include <cds/intrusive/striped_set.h>
6
7 #include <cds/details/std/type_traits.h>    // std::is_same
8
9 namespace set {
10     namespace bi = boost::intrusive;
11
12     namespace {
13         typedef IntrusiveStripedSetHdrTest::base_item< bi::slist_base_hook<> > base_item_type;
14         typedef IntrusiveStripedSetHdrTest::member_item< bi::slist_member_hook<> > member_item_type;
15     }
16
17     void IntrusiveStripedSetHdrTest::Striped_slist_basehook_cmp()
18     {
19         typedef ci::StripedSet<
20             bi::slist<base_item_type>
21             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
22             ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
23             ,co::mutex_policy< ci::striped_set::striping<> >
24         > set_type;
25
26         static_assert( (std::is_same<
27             IntrusiveStripedSetHdrTest::cmp<base_item_type>
28             ,set_type::bucket_type::key_comparator
29         >::value), "Key compare function selection error" );
30
31         test<set_type>();
32     }
33
34     void IntrusiveStripedSetHdrTest::Striped_slist_basehook_less()
35     {
36         typedef ci::StripedSet<
37             bi::slist<base_item_type>
38             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
39             ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
40         > set_type;
41
42         test<set_type>();
43     }
44
45     void IntrusiveStripedSetHdrTest::Striped_slist_basehook_cmpmix()
46     {
47         typedef ci::StripedSet<
48             bi::slist<base_item_type>
49             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
50             ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
51             ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
52         > set_type;
53
54         static_assert( (std::is_same<
55             IntrusiveStripedSetHdrTest::cmp<base_item_type>
56             ,set_type::bucket_type::key_comparator
57         >::value), "Key compare function selection error" );
58
59         test<set_type>();
60     }
61
62     void IntrusiveStripedSetHdrTest::Striped_slist_basehook_bucket_threshold()
63     {
64         typedef ci::StripedSet<
65             bi::slist<base_item_type>
66             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
67             ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
68             ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
69             ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
70         > set_type;
71
72         static_assert( (std::is_same<
73             IntrusiveStripedSetHdrTest::cmp<base_item_type>
74             ,set_type::bucket_type::key_comparator
75         >::value), "Key compare function selection error" );
76
77         test<set_type>();
78     }
79
80     void IntrusiveStripedSetHdrTest::Striped_slist_basehook_bucket_threshold_rt()
81     {
82         typedef ci::StripedSet<
83             bi::slist<base_item_type>
84             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
85             ,co::less< IntrusiveStripedSetHdrTest::less<base_item_type> >
86             ,co::compare< IntrusiveStripedSetHdrTest::cmp<base_item_type> >
87             ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
88         > set_type;
89
90         static_assert( (std::is_same<
91             IntrusiveStripedSetHdrTest::cmp<base_item_type>
92             ,set_type::bucket_type::key_comparator
93         >::value), "Key compare function selection error" );
94
95         set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
96         test_with( s );
97     }
98
99     void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_cmp()
100     {
101         typedef ci::StripedSet<
102             bi::slist<
103                 member_item_type
104                 , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
105             >
106             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
107             ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
108         > set_type;
109
110         test<set_type>();
111     }
112
113     void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_less()
114     {
115         typedef ci::StripedSet<
116             bi::slist<
117                 member_item_type
118                 , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
119             >
120             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
121             ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
122         > set_type;
123
124         test<set_type>();
125     }
126
127     void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_cmpmix()
128     {
129         typedef ci::StripedSet<
130             bi::slist<
131                 member_item_type
132                 , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
133             >
134             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
135             ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
136             ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
137         > set_type;
138
139         test<set_type>();
140     }
141
142     void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_bucket_threshold()
143     {
144         typedef ci::StripedSet<
145             bi::slist<
146                 member_item_type
147                 , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
148             >
149             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
150             ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
151             ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
152             ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<8> >
153         > set_type;
154
155         static_assert( (std::is_same<
156             IntrusiveStripedSetHdrTest::cmp<member_item_type>
157             ,set_type::bucket_type::key_comparator
158         >::value), "Key compare function selection error" );
159
160         test<set_type>();
161     }
162
163     void IntrusiveStripedSetHdrTest::Striped_slist_memberhook_bucket_threshold_rt()
164     {
165         typedef ci::StripedSet<
166             bi::slist<
167             member_item_type
168             , bi::member_hook< member_item_type, bi::slist_member_hook<>, &member_item_type::hMember>
169             >
170             ,co::hash< IntrusiveStripedSetHdrTest::hash_int >
171             ,co::less< IntrusiveStripedSetHdrTest::less<member_item_type> >
172             ,co::compare< IntrusiveStripedSetHdrTest::cmp<member_item_type> >
173             ,co::resizing_policy< ci::striped_set::single_bucket_size_threshold<0> >
174         > set_type;
175
176         static_assert( (std::is_same<
177             IntrusiveStripedSetHdrTest::cmp<member_item_type>
178             ,set_type::bucket_type::key_comparator
179         >::value), "Key compare function selection error" );
180
181         set_type s( 128, ci::striped_set::single_bucket_size_threshold<0>(4) );
182         test_with( s );
183     }
184
185 } // namespace set
186
187