Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / set / hdr_striped_hashset_list.cpp
1 //$$CDS-header$$
2
3 #include "set/hdr_striped_set.h"
4 #include <cds/container/striped_set/std_list.h>
5 #include <cds/container/striped_set.h>
6 #include <cds/lock/spinlock.h>
7
8 namespace set {
9
10     namespace {
11         struct my_copy_policy {
12             typedef std::list<StripedSetHdrTest::item> list_type;
13             typedef list_type::iterator iterator;
14
15             void operator()( list_type& list, iterator itInsert, iterator itWhat )
16             {
17                 list.insert( itInsert, std::make_pair(itWhat->key(), itWhat->val()) );
18             }
19         };
20
21         typedef std::list<StripedSetHdrTest::item> sequence_t;
22     }
23
24     void StripedSetHdrTest::Striped_list()
25     {
26         CPPUNIT_MESSAGE( "cmp");
27         typedef cc::StripedSet< sequence_t
28             , co::hash< hash_int >
29             , co::compare< cmp<item> >
30             ,co::mutex_policy< cc::striped_set::striping<> >
31         >   set_cmp;
32         test_striped2< set_cmp >();
33
34         CPPUNIT_MESSAGE( "less");
35         typedef cc::StripedSet< sequence_t
36             , co::hash< hash_int >
37             ,co::mutex_policy< cc::striped_set::striping<> >
38             , co::less< less<item> >
39         >   set_less;
40         test_striped2< set_less >();
41
42         CPPUNIT_MESSAGE( "cmpmix");
43         typedef cc::StripedSet< sequence_t
44             , co::hash< hash_int >
45             , co::compare< cmp<item> >
46             ,co::mutex_policy< cc::striped_set::striping<> >
47             , co::less< less<item> >
48         >   set_cmpmix;
49         test_striped2< set_cmpmix >();
50
51         // Spinlock as lock policy
52         CPPUNIT_MESSAGE( "spinlock");
53         typedef cc::StripedSet< sequence_t
54             , co::hash< hash_int >
55             , co::less< less<item> >
56             ,co::mutex_policy< cc::striped_set::striping< cds::lock::Spin > >
57         >   set_spin;
58         test_striped2< set_spin >();
59
60         // Resizing policy
61         CPPUNIT_MESSAGE( "load_factor_resizing<0>(8)");
62         {
63             typedef cc::StripedSet< sequence_t
64                 , co::hash< hash_int >
65                 , co::less< less<item> >
66                 , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
67             >   set_less_resizing_lf;
68             set_less_resizing_lf s( 30, cc::striped_set::load_factor_resizing<0>(8));
69             test_striped_with(s);
70         }
71
72         CPPUNIT_MESSAGE( "load_factor_resizing<4>");
73         typedef cc::StripedSet< sequence_t
74             , co::hash< hash_int >
75             , co::less< less<item> >
76             , co::resizing_policy< cc::striped_set::load_factor_resizing<4> >
77         >   set_less_resizing_lf16;
78         test_striped2< set_less_resizing_lf16 >();
79
80         CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(8)");
81         {
82             typedef cc::StripedSet< sequence_t
83                 , co::hash< hash_int >
84                 , co::less< less<item> >
85                 , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
86             >   set_less_resizing_sbt;
87             set_less_resizing_sbt s(30, cc::striped_set::single_bucket_size_threshold<0>(8) );
88             test_striped_with(s);
89         }
90
91         CPPUNIT_MESSAGE( "single_bucket_size_threshold<6>");
92         typedef cc::StripedSet< sequence_t
93             , co::hash< hash_int >
94             , co::less< less<item> >
95             , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<6> >
96         >   set_less_resizing_sbt6;
97         test_striped2< set_less_resizing_sbt6 >();
98
99         // Copy policy
100         CPPUNIT_MESSAGE( "copy_item");
101         typedef cc::StripedSet< sequence_t
102             , co::hash< hash_int >
103             , co::compare< cmp<item> >
104             , co::copy_policy< cc::striped_set::copy_item >
105         >   set_copy_item;
106         test_striped2< set_copy_item >();
107
108         CPPUNIT_MESSAGE( "swap_item");
109         typedef cc::StripedSet< sequence_t
110             , co::hash< hash_int >
111             , co::compare< cmp<item> >
112             , co::copy_policy< cc::striped_set::swap_item >
113         >   set_swap_item;
114         test_striped2< set_swap_item >();
115
116         CPPUNIT_MESSAGE( "move_item");
117         typedef cc::StripedSet< sequence_t
118             , co::hash< hash_int >
119             , co::compare< cmp<item> >
120             , co::copy_policy< cc::striped_set::move_item >
121         >   set_move_item;
122         test_striped2< set_move_item >();
123
124         CPPUNIT_MESSAGE( "special copy_item");
125         typedef cc::StripedSet< sequence_t
126             , co::hash< hash_int >
127             , co::compare< cmp<item> >
128             , co::copy_policy< my_copy_policy >
129         >   set_special_copy_item;
130         test_striped2< set_special_copy_item >();
131
132     }
133
134 }   // namespace set