3 #include "map/hdr_striped_map.h"
5 #include <boost/version.hpp>
6 #include <cds/details/defs.h>
7 #if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION == CDS_COMPILER_MSVC12 && BOOST_VERSION <= 105500
9 void StripedMapHdrTest::Refinable_boost_flat_map()
11 CPPUNIT_MESSAGE("Skipped; for Microsoft Visual C++ 2013 and boost::container::flat_map you should use boost version 1.56 or above");
15 #elif BOOST_VERSION >= 104800
17 #include <cds/container/striped_map/boost_flat_map.h>
18 #include <cds/container/striped_map.h>
19 #include <cds/sync/spinlock.h>
24 typedef boost::container::flat_map<StripedMapHdrTest::key_type, StripedMapHdrTest::value_type, StripedMapHdrTest::less > map_t;
26 struct my_copy_policy {
27 typedef map_t::iterator iterator;
29 void operator()( map_t& m, iterator /*itInsert*/, iterator itWhat )
36 void StripedMapHdrTest::Refinable_boost_flat_map()
38 CPPUNIT_MESSAGE( "cmp");
39 typedef cc::StripedMap< map_t
40 ,co::mutex_policy< cc::striped_set::refinable<> >
41 , co::hash< hash_int >
44 test_striped< map_cmp >();
46 CPPUNIT_MESSAGE( "less");
47 typedef cc::StripedMap< map_t
48 ,co::mutex_policy< cc::striped_set::refinable<> >
49 , co::hash< hash_int >
52 test_striped< map_less >();
54 CPPUNIT_MESSAGE( "cmpmix");
55 typedef cc::StripedMap< map_t
56 ,co::mutex_policy< cc::striped_set::refinable<> >
57 , co::hash< hash_int >
61 test_striped< map_cmpmix >();
63 // Spinlock as lock policy
64 CPPUNIT_MESSAGE( "spinlock");
65 typedef cc::StripedMap< map_t
66 ,co::mutex_policy< cc::striped_set::refinable<cds::sync::spin> >
67 , co::hash< hash_int >
70 test_striped< map_spin >();
73 CPPUNIT_MESSAGE( "load_factor_resizing<0>(1024)");
75 typedef cc::StripedMap< map_t
76 ,co::mutex_policy< cc::striped_set::refinable<> >
77 , co::hash< hash_int >
79 , co::resizing_policy< cc::striped_set::load_factor_resizing<0> >
80 > map_less_resizing_lf;
81 map_less_resizing_lf m(30, cc::striped_set::load_factor_resizing<0>(1024));
85 CPPUNIT_MESSAGE( "load_factor_resizing<256>");
86 typedef cc::StripedMap< map_t
87 ,co::mutex_policy< cc::striped_set::refinable<> >
88 , co::hash< hash_int >
90 , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
91 > map_less_resizing_lf16;
92 test_striped< map_less_resizing_lf16 >();
94 CPPUNIT_MESSAGE( "single_bucket_size_threshold<0>(1024)");
96 typedef cc::StripedMap< map_t
97 ,co::mutex_policy< cc::striped_set::refinable<> >
98 , co::hash< hash_int >
100 , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<0> >
101 > map_less_resizing_sbt;
102 map_less_resizing_sbt m(30, cc::striped_set::single_bucket_size_threshold<0>(1024));
103 test_striped_with(m);
106 CPPUNIT_MESSAGE( "single_bucket_size_threshold<256>");
107 typedef cc::StripedMap< map_t
108 ,co::mutex_policy< cc::striped_set::refinable<> >
109 , co::hash< hash_int >
111 , co::resizing_policy< cc::striped_set::single_bucket_size_threshold<256> >
112 > map_less_resizing_sbt16;
113 test_striped< map_less_resizing_sbt16 >();
116 CPPUNIT_MESSAGE( "load_factor_resizing<256>, copy_item");
117 typedef cc::StripedMap< map_t
118 ,co::mutex_policy< cc::striped_set::refinable<> >
119 , co::hash< hash_int >
121 , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
122 , co::copy_policy< cc::striped_set::copy_item >
124 test_striped< set_copy_item >();
126 CPPUNIT_MESSAGE( "load_factor_resizing<256>, swap_item");
127 typedef cc::StripedMap< map_t
128 ,co::mutex_policy< cc::striped_set::refinable<> >
129 , co::hash< hash_int >
131 , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
132 , co::copy_policy< cc::striped_set::swap_item >
134 test_striped< set_swap_item >();
136 CPPUNIT_MESSAGE( "load_factor_resizing<256>, move_item");
137 typedef cc::StripedMap< map_t
138 ,co::mutex_policy< cc::striped_set::refinable<> >
139 , co::hash< hash_int >
141 , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
142 , co::copy_policy< cc::striped_set::move_item >
144 test_striped< set_move_item >();
146 CPPUNIT_MESSAGE( "load_factor_resizing<256>, special copy_policy");
147 typedef cc::StripedMap< map_t
148 ,co::mutex_policy< cc::striped_set::refinable<> >
149 , co::hash< hash_int >
151 , co::resizing_policy< cc::striped_set::load_factor_resizing<256> >
152 , co::copy_policy< my_copy_policy >
153 > set_special_copy_item;
154 test_striped< set_special_copy_item >();
162 void StripedMapHdrTest::Refinable_boost_flat_map()
164 CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_map is not compatible with MS VC++ 11" );
170 #else // BOOST_VERSION < 104800
173 void StripedMapHdrTest::Refinable_boost_flat_map()
175 CPPUNIT_MESSAGE( "Skipped; for boost::container::flat_map you should use boost version 1.48 or above" );
178 #endif // BOOST_VERSION