From: khizmax Date: Thu, 8 Oct 2015 20:39:08 +0000 (+0300) Subject: Incorporated MultiLevelHashMap into map MT-test X-Git-Tag: v2.1.0~90 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d771a88adaf209268effe18e7f3df3c91fc445a8;p=libcds.git Incorporated MultiLevelHashMap into map MT-test Adapted Map_DelOdd MT-test for MultiLevelHashMap --- diff --git a/projects/Win/vc12/unit-map-delodd.vcxproj b/projects/Win/vc12/unit-map-delodd.vcxproj index 4ceb02af..abce74e3 100644 --- a/projects/Win/vc12/unit-map-delodd.vcxproj +++ b/projects/Win/vc12/unit-map-delodd.vcxproj @@ -56,6 +56,7 @@ false + false diff --git a/projects/Win/vc14/unit-map-delodd.vcxproj b/projects/Win/vc14/unit-map-delodd.vcxproj index a0ced106..0f2ebc7b 100644 --- a/projects/Win/vc14/unit-map-delodd.vcxproj +++ b/projects/Win/vc14/unit-map-delodd.vcxproj @@ -64,6 +64,7 @@ false + false diff --git a/projects/source.unit.map.mk b/projects/source.unit.map.mk index 5a212d4e..8367de57 100644 --- a/projects/source.unit.map.mk +++ b/projects/source.unit.map.mk @@ -88,9 +88,10 @@ CDSUNIT_MAP_SOURCES := \ tests/unit/map2/map_insdelfind_striped.cpp \ tests/unit/map2/map_insdelfind_std.cpp \ tests/unit/map2/map_delodd.cpp \ - tests/unit/map2/map_delodd_michael.cpp \ tests/unit/map2/map_delodd_bronsonavltree.cpp \ + tests/unit/map2/map_delodd_cuckoo.cpp \ tests/unit/map2/map_delodd_ellentree.cpp \ - tests/unit/map2/map_delodd_split.cpp \ + tests/unit/map2/map_delodd_michael.cpp \ + tests/unit/map2/map_delodd_multilevelhashmap.cpp \ tests/unit/map2/map_delodd_skip.cpp \ - tests/unit/map2/map_delodd_cuckoo.cpp \ + tests/unit/map2/map_delodd_split.cpp \ diff --git a/tests/data/test-debug.conf b/tests/data/test-debug.conf index 85f68656..f7b05d65 100644 --- a/tests/data/test-debug.conf +++ b/tests/data/test-debug.conf @@ -271,3 +271,6 @@ CuckooInitialSize=256 CuckooProbesetSize=8 # 0 - use default CuckooProbesetThreshold=0 +# *** MultiLevelHashMap properties +MultiLevelMapHeadBits=8 +MultiLevelMapArrayBits=4 diff --git a/tests/data/test-express.conf b/tests/data/test-express.conf index 349ff184..3fd1f3cd 100644 --- a/tests/data/test-express.conf +++ b/tests/data/test-express.conf @@ -269,3 +269,6 @@ CuckooInitialSize=1024 CuckooProbesetSize=16 # 0 - use default CuckooProbesetThreshold=0 +# *** MultiLevelHashMap properties +MultiLevelMapHeadBits=8 +MultiLevelMapArrayBits=4 diff --git a/tests/data/test.conf b/tests/data/test.conf index 5dcb2086..257a7def 100644 --- a/tests/data/test.conf +++ b/tests/data/test.conf @@ -265,3 +265,6 @@ CuckooInitialSize=1024 CuckooProbesetSize=16 # 0 - use default CuckooProbesetThreshold=0 +# *** MultiLevelHashMap properties +MultiLevelMapHeadBits=10 +MultiLevelMapArrayBits=4 diff --git a/tests/unit/map2/CMakeLists.txt b/tests/unit/map2/CMakeLists.txt index 319c86ab..454721ae 100644 --- a/tests/unit/map2/CMakeLists.txt +++ b/tests/unit/map2/CMakeLists.txt @@ -89,12 +89,13 @@ set(CDSUNIT_MAP_SOURCES map_insdelfind_striped.cpp map_insdelfind_std.cpp map_delodd.cpp - map_delodd_michael.cpp map_delodd_bronsonavltree.cpp + map_delodd_cuckoo.cpp map_delodd_ellentree.cpp + map_delodd_michael.cpp + map_delodd_multilevelhashmap.cpp map_delodd_split.cpp map_delodd_skip.cpp - map_delodd_cuckoo.cpp ) add_executable(${PACKAGE_NAME} ${CDSUNIT_MAP_SOURCES} $) diff --git a/tests/unit/map2/map_defs.h b/tests/unit/map2/map_defs.h index 64eb8603..1d30ad29 100644 --- a/tests/unit/map2/map_defs.h +++ b/tests/unit/map2/map_defs.h @@ -730,65 +730,230 @@ // MultiLevelHashMap #undef CDSUNIT_DECLARE_MultiLevelHashMap64 +#undef CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal + #if CDS_BUILD_BITS == 64 +# ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED +# define CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city64) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city64_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city64) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city64_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city128) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_city128_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city128) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_city128_stat) \ + +# else +# define CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal +# endif + # define CDSUNIT_DECLARE_MultiLevelHashMap64 \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city64) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city64_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city64) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city64_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city64) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city64_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city64) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city64_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city64) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city64_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city128) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_city128_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city128) \ - TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city128_stat) + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_city128_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city128) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_city128_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city128) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_city128_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city128) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_city128_stat) \ + CDSUNIT_DECLARE_MultiLevelHashMap64_RCU_Signal + #else # define CDSUNIT_DECLARE_MultiLevelHashMap64 #endif #undef CDSUNIT_DECLARE_MultiLevelHashMap -#define CDSUNIT_DECLARE_MultiLevelHashMap \ +#undef CDSUNIT_DECLARE_MultiLevelHashMap_hash +#undef CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal +#undef CDSUNIT_DECLARE_MultiLevelHashMap_stdhash +#undef CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal + +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED +# define CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_stdhash) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_stdhash_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_stdhash) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_stdhash_stat) \ + +# define CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_md5) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_md5_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_md5) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_md5_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_sha256) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_shb_sha256_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_sha256) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_sht_sha256_stat) \ + +#else +# define CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal +# define CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal +#endif + +#define CDSUNIT_DECLARE_MultiLevelHashMap_stdhash \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_stdhash) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_stdhash_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_stdhash) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_stdhash_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_stdhash) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_stdhash_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_stdhash) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_stdhash_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_stdhash) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_stdhash_stat) \ + CDSUNIT_DECLARE_MultiLevelHashMap_stdhash_RCU_Signal + +#define CDSUNIT_DECLARE_MultiLevelHashMap_hash \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_md5) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_md5_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_md5) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_md5_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_md5) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_md5_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_md5) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_md5_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_md5) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_md5_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_sha256) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_hp_sha256_stat) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_sha256) \ TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_dhp_sha256_stat) \ - CDSUNIT_DECLARE_MultiLevelHashMap64 + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_sha256) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpi_sha256_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_sha256) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpb_sha256_stat) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_sha256) \ + TEST_CASE(tag_MultiLevelHashMap, MultiLevelHashMap_rcu_gpt_sha256_stat) \ + CDSUNIT_DECLARE_MultiLevelHashMap_hash_RCU_Signal \ + CDSUNIT_DECLARE_MultiLevelHashMap64 \ + +#define CDSUNIT_DECLARE_MultiLevelHashMap \ + CDSUNIT_DECLARE_MultiLevelHashMap_stdhash \ + CDSUNIT_DECLARE_MultiLevelHashMap_hash \ #undef CDSUNIT_TEST_MultiLevelHashMap64 +#undef CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal #if CDS_BUILD_BITS == 64 +# ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED +# define CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city64) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city64_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city64) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city64_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city128) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_city128_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city128) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_city128_stat) \ + +# else +# define CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal +# endif + # define CDSUNIT_TEST_MultiLevelHashMap64 \ CPPUNIT_TEST(MultiLevelHashMap_hp_city64) \ CPPUNIT_TEST(MultiLevelHashMap_hp_city64_stat) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_city64) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_city64_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city64) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city64_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city64) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city64_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city64) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city64_stat) \ CPPUNIT_TEST(MultiLevelHashMap_hp_city128) \ CPPUNIT_TEST(MultiLevelHashMap_hp_city128_stat) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_city128) \ - CPPUNIT_TEST(MultiLevelHashMap_dhp_city128_stat) + CPPUNIT_TEST(MultiLevelHashMap_dhp_city128_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city128) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_city128_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city128) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_city128_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city128) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_city128_stat) \ + CDSUNIT_TEST_MultiLevelHashMap64_RCU_Signal + #else # define CDSUNIT_TEST_MultiLevelHashMap64 #endif -#undef CDSUNIT_TEST_MultiLevelHashMap -#define CDSUNIT_TEST_MultiLevelHashMap \ +#undef CDSUNIT_TEST_MultiLevelHashMap_hash +#undef CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal +#undef CDSUNIT_TEST_MultiLevelHashMap_stdhash +#undef CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal + +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED +# define CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_stdhash) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_stdhash_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_stdhash) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_stdhash_stat) \ + +# define CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_md5) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_md5_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_md5) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_md5_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_sha256) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_shb_sha256_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_sha256) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_sht_sha256_stat) \ + +#else +# define CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal +# define CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal +#endif + +#define CDSUNIT_TEST_MultiLevelHashMap_stdhash \ CPPUNIT_TEST(MultiLevelHashMap_hp_stdhash) \ CPPUNIT_TEST(MultiLevelHashMap_hp_stdhash_stat) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_stdhash) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_stdhash_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_stdhash) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_stdhash_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_stdhash) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_stdhash_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_stdhash) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_stdhash_stat) \ + CDSUNIT_TEST_MultiLevelHashMap_stdhash_RCU_Signal + +#define CDSUNIT_TEST_MultiLevelHashMap_hash \ CPPUNIT_TEST(MultiLevelHashMap_hp_md5) \ CPPUNIT_TEST(MultiLevelHashMap_hp_md5_stat) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_md5) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_md5_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_md5) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_md5_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_md5) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_md5_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_md5) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_md5_stat) \ CPPUNIT_TEST(MultiLevelHashMap_hp_sha256) \ CPPUNIT_TEST(MultiLevelHashMap_hp_sha256_stat) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_sha256) \ CPPUNIT_TEST(MultiLevelHashMap_dhp_sha256_stat) \ - CDSUNIT_TEST_MultiLevelHashMap64 + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_sha256) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpi_sha256_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_sha256) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpb_sha256_stat) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_sha256) \ + CPPUNIT_TEST(MultiLevelHashMap_rcu_gpt_sha256_stat) \ + CDSUNIT_TEST_MultiLevelHashMap_hash_RCU_Signal \ + CDSUNIT_TEST_MultiLevelHashMap64 \ +#define CDSUNIT_TEST_MultiLevelHashMap \ + CDSUNIT_TEST_MultiLevelHashMap_stdhash \ + CDSUNIT_TEST_MultiLevelHashMap_hash \ diff --git a/tests/unit/map2/map_delodd.cpp b/tests/unit/map2/map_delodd.cpp index 3284565f..69b78ab5 100644 --- a/tests/unit/map2/map_delodd.cpp +++ b/tests/unit/map2/map_delodd.cpp @@ -17,6 +17,8 @@ namespace map2 { c_nCuckooProbesetSize = cfg.getSizeT("CuckooProbesetSize", c_nCuckooProbesetSize ); c_nCuckooProbesetThreshold = cfg.getSizeT("CuckooProbesetThreshold", c_nCuckooProbesetThreshold ); + c_nMultiLevelMap_HeadBits = cfg.getSizeT("MultiLevelMapHeadBits", c_nMultiLevelMap_HeadBits); + c_nMultiLevelMap_ArrayBits = cfg.getSizeT("MultiLevelMapArrayBits", c_nMultiLevelMap_ArrayBits); if ( c_nInsThreadCount == 0 ) c_nInsThreadCount = cds::OS::topology::processor_count(); diff --git a/tests/unit/map2/map_delodd.h b/tests/unit/map2/map_delodd.h index 01f3af6f..e7167db2 100644 --- a/tests/unit/map2/map_delodd.h +++ b/tests/unit/map2/map_delodd.h @@ -120,10 +120,14 @@ namespace map2 { size_t c_nExtractThreadCount = 4; // extract thread count size_t c_nMapSize = 1000000; // max map size size_t c_nMaxLoadFactor = 8; // maximum load factor + size_t c_nCuckooInitialSize = 1024;// initial size for CuckooMap size_t c_nCuckooProbesetSize = 16; // CuckooMap probeset size (only for list-based probeset) size_t c_nCuckooProbesetThreshold = 0; // CUckooMap probeset threshold (0 - use default) + size_t c_nMultiLevelMap_HeadBits = 10; + size_t c_nMultiLevelMap_ArrayBits = 4; + bool c_bPrintGCState = true; size_t c_nLoadFactor; // current load factor @@ -276,6 +280,23 @@ namespace map2 { virtual void init() { cds::threading::Manager::attachThread() ; } virtual void fini() { cds::threading::Manager::detachThread() ; } + template + struct eraser { + static bool erase(Map& map, size_t key, size_t /*insThread*/) + { + return map.erase_with(key, key_less()); + } + }; + + template <> + struct eraser + { + static bool erase(Map& map, size_t key, size_t insThread) + { + return map.erase(key_type(key, insThread)); + } + }; + virtual void test() { Map& rMap = m_Map; @@ -291,10 +312,20 @@ namespace map2 { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( size_t i = 0; i < arrData.size(); ++i ) { if ( arrData[i] & 1 ) { - if ( rMap.erase_with( arrData[i], key_less() )) - ++m_nDeleteSuccess; - else - ++m_nDeleteFailed; + if ( Map::c_bEraseExactKey ) { + for (size_t key = 0; key < nInsThreadCount; ++key) { + if ( eraser::erase( rMap, arrData[i], key )) + ++m_nDeleteSuccess; + else + ++m_nDeleteFailed; + } + } + else { + if ( eraser::erase(rMap, arrData[i], 0) ) + ++m_nDeleteSuccess; + else + ++m_nDeleteFailed; + } } } if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 ) @@ -305,10 +336,20 @@ namespace map2 { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( size_t i = arrData.size() - 1; i > 0; --i ) { if ( arrData[i] & 1 ) { - if ( rMap.erase_with( arrData[i], key_less() )) - ++m_nDeleteSuccess; - else - ++m_nDeleteFailed; + if ( Map::c_bEraseExactKey ) { + for (size_t key = 0; key < nInsThreadCount; ++key) { + if (eraser::erase(rMap, arrData[i], key)) + ++m_nDeleteSuccess; + else + ++m_nDeleteFailed; + } + } + else { + if (eraser::erase(rMap, arrData[i], 0)) + ++m_nDeleteSuccess; + else + ++m_nDeleteFailed; + } } } if ( getTest().m_nInsThreadCount.load( atomics::memory_order_acquire ) == 0 ) @@ -351,6 +392,23 @@ namespace map2 { virtual void init() { cds::threading::Manager::attachThread() ; } virtual void fini() { cds::threading::Manager::detachThread() ; } + template + struct extractor { + static typename Map::guarded_ptr extract(Map& map, size_t key, size_t /*insThread*/) + { + return map.extract_with(key, key_less()); + } + }; + + template <> + struct extractor + { + static typename Map::guarded_ptr extract(Map& map, size_t key, size_t insThread) + { + return map.extract(key_type(key, insThread)); + } + }; + virtual void test() { Map& rMap = m_Map; @@ -367,7 +425,7 @@ namespace map2 { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( size_t i = 0; i < arrData.size(); ++i ) { if ( arrData[i] & 1 ) { - gp = rMap.extract_with( arrData[i], key_less()); + gp = extractor< Map::c_bEraseExactKey >::extract( rMap, arrData[i], k ); if ( gp ) ++m_nDeleteSuccess; else @@ -383,7 +441,7 @@ namespace map2 { for ( size_t k = 0; k < nInsThreadCount; ++k ) { for ( size_t i = arrData.size() - 1; i > 0; --i ) { if ( arrData[i] & 1 ) { - gp = rMap.extract_with( arrData[i], key_less()); + gp = extractor< Map::c_bEraseExactKey >::extract( rMap, arrData[i], k); if ( gp ) ++m_nDeleteSuccess; else @@ -430,6 +488,23 @@ namespace map2 { virtual void init() { cds::threading::Manager::attachThread() ; } virtual void fini() { cds::threading::Manager::detachThread() ; } + template + struct extractor { + static typename Map::exempt_ptr extract( Map& map, size_t key, size_t /*insThread*/ ) + { + return map.extract_with( key, key_less()); + } + }; + + template <> + struct extractor + { + static typename Map::exempt_ptr extract(Map& map, size_t key, size_t insThread) + { + return map.extract( key_type(key, insThread)); + } + }; + virtual void test() { Map& rMap = m_Map; @@ -448,7 +523,7 @@ namespace map2 { if ( Map::c_bExtractLockExternal ) { { typename Map::rcu_lock l; - xp = rMap.extract_with( arrData[i], key_less() ); + xp = extractor::extract( rMap, arrData[i], k ); if ( xp ) ++m_nDeleteSuccess; else @@ -456,7 +531,7 @@ namespace map2 { } } else { - xp = rMap.extract_with( arrData[i], key_less() ); + xp = extractor::extract( rMap, arrData[i], k); if ( xp ) ++m_nDeleteSuccess; else @@ -476,7 +551,7 @@ namespace map2 { if ( Map::c_bExtractLockExternal ) { { typename Map::rcu_lock l; - xp = rMap.extract_with( arrData[i], key_less() ); + xp = extractor::extract(rMap, arrData[i], k); if ( xp ) ++m_nDeleteSuccess; else @@ -484,7 +559,7 @@ namespace map2 { } } else { - xp = rMap.extract_with( arrData[i], key_less() ); + xp = extractor::extract(rMap, arrData[i], k); if ( xp ) ++m_nDeleteSuccess; else @@ -698,20 +773,17 @@ namespace map2 { CDSUNIT_DECLARE_SkipListMap CDSUNIT_DECLARE_EllenBinTreeMap CDSUNIT_DECLARE_BronsonAVLTreeMap + CDSUNIT_DECLARE_MultiLevelHashMap64 CDSUNIT_DECLARE_CuckooMap - // This test is not suitable for MultiLevelHashMap - //CDSUNIT_DECLARE_MultiLevelHashMap - CPPUNIT_TEST_SUITE(Map_DelOdd) CDSUNIT_TEST_MichaelMap CDSUNIT_TEST_SplitList CDSUNIT_TEST_SkipListMap CDSUNIT_TEST_EllenBinTreeMap CDSUNIT_TEST_BronsonAVLTreeMap + CDSUNIT_TEST_MultiLevelHashMap64 CDSUNIT_TEST_CuckooMap - - //CDSUNIT_TEST_MultiLevelHashMap // the test is not suitable CPPUNIT_TEST_SUITE_END(); // Not implemented yet diff --git a/tests/unit/map2/map_delodd_multilevelhashmap.cpp b/tests/unit/map2/map_delodd_multilevelhashmap.cpp new file mode 100644 index 00000000..384ea26e --- /dev/null +++ b/tests/unit/map2/map_delodd_multilevelhashmap.cpp @@ -0,0 +1,12 @@ +//$$CDS-header$$ + +#include "map2/map_delodd.h" +#include "map2/map_type_multilevel_hashmap.h" + +#undef TEST_CASE +#define TEST_CASE(TAG, X) void Map_DelOdd::X() { run_test::X>(); } +#include "map2/map_defs.h" + +namespace map2 { + CDSUNIT_DECLARE_MultiLevelHashMap64 +} // namespace map2 diff --git a/tests/unit/map2/map_type_bronson_avltree.h b/tests/unit/map2/map_type_bronson_avltree.h index 2fee7d8a..77ee8734 100644 --- a/tests/unit/map2/map_type_bronson_avltree.h +++ b/tests/unit/map2/map_type_bronson_avltree.h @@ -27,6 +27,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = true; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; struct tag_BronsonAVLTreeMap; diff --git a/tests/unit/map2/map_type_cuckoo.h b/tests/unit/map2/map_type_cuckoo.h index c99d8676..312c64f9 100644 --- a/tests/unit/map2/map_type_cuckoo.h +++ b/tests/unit/map2/map_type_cuckoo.h @@ -34,6 +34,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = false; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; struct tag_CuckooMap; diff --git a/tests/unit/map2/map_type_ellen_bintree.h b/tests/unit/map2/map_type_ellen_bintree.h index bc29546e..894ae38a 100644 --- a/tests/unit/map2/map_type_ellen_bintree.h +++ b/tests/unit/map2/map_type_ellen_bintree.h @@ -27,6 +27,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = true; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; struct tag_EllenBinTreeMap; diff --git a/tests/unit/map2/map_type_michael.h b/tests/unit/map2/map_type_michael.h index 76d8fcda..ea4b74dd 100644 --- a/tests/unit/map2/map_type_michael.h +++ b/tests/unit/map2/map_type_michael.h @@ -25,6 +25,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = true; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; struct tag_MichaelHashMap; diff --git a/tests/unit/map2/map_type_multilevel_hashmap.h b/tests/unit/map2/map_type_multilevel_hashmap.h index 71d6091b..c2705a64 100644 --- a/tests/unit/map2/map_type_multilevel_hashmap.h +++ b/tests/unit/map2/map_type_multilevel_hashmap.h @@ -7,6 +7,7 @@ #include #include +#include #include "print_multilevel_hashset_stat.h" #include "hashing/hash_func.h" @@ -26,6 +27,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = true; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = true; }; struct tag_MultiLevelHashMap; @@ -39,6 +41,13 @@ namespace map2 { typedef MultiLevelHashMap< cds::gc::HP, Key, Value > MultiLevelHashMap_hp_stdhash; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value > MultiLevelHashMap_dhp_stdhash; + typedef MultiLevelHashMap< rcu_gpi, Key, Value > MultiLevelHashMap_rcu_gpi_stdhash; + typedef MultiLevelHashMap< rcu_gpb, Key, Value > MultiLevelHashMap_rcu_gpb_stdhash; + typedef MultiLevelHashMap< rcu_gpt, Key, Value > MultiLevelHashMap_rcu_gpt_stdhash; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value > MultiLevelHashMap_rcu_shb_stdhash; + typedef MultiLevelHashMap< rcu_sht, Key, Value > MultiLevelHashMap_rcu_sht_stdhash; +#endif struct traits_MultiLevelHashMap_stat: public cc::multilevel_hashmap::make_traits< co::stat< cc::multilevel_hashmap::stat<>> @@ -47,6 +56,13 @@ namespace map2 { typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_hp_stdhash_stat; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_dhp_stdhash_stat; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_rcu_gpi_stdhash_stat; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_rcu_gpb_stdhash_stat; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_rcu_gpt_stdhash_stat; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_rcu_shb_stdhash_stat; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_stat > MultiLevelHashMap_rcu_sht_stdhash_stat; +#endif // SHA256 struct traits_MultiLevelHashMap_sha256 : public cc::multilevel_hashmap::traits @@ -55,6 +71,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_hp_sha256; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_dhp_sha256; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_rcu_gpi_sha256; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_rcu_gpb_sha256; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_rcu_gpt_sha256; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_rcu_shb_sha256; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_sha256 > MultiLevelHashMap_rcu_sht_sha256; +#endif struct traits_MultiLevelHashMap_sha256_stat : public traits_MultiLevelHashMap_sha256 { @@ -62,6 +85,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_hp_sha256_stat; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_dhp_sha256_stat; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_rcu_gpi_sha256_stat; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_rcu_gpb_sha256_stat; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_rcu_gpt_sha256_stat; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_rcu_shb_sha256_stat; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_sha256_stat > MultiLevelHashMap_rcu_sht_sha256_stat; +#endif //MD5 struct traits_MultiLevelHashMap_md5 : public cc::multilevel_hashmap::traits @@ -70,6 +100,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_hp_md5; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_dhp_md5; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_rcu_gpi_md5; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_rcu_gpb_md5; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_rcu_gpt_md5; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_rcu_shb_md5; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_md5 > MultiLevelHashMap_rcu_sht_md5; +#endif struct traits_MultiLevelHashMap_md5_stat : public traits_MultiLevelHashMap_md5 { @@ -77,6 +114,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_hp_md5_stat; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_dhp_md5_stat; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_rcu_gpi_md5_stat; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_rcu_gpb_md5_stat; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_rcu_gpt_md5_stat; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_rcu_shb_md5_stat; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_md5_stat > MultiLevelHashMap_rcu_sht_md5_stat; +#endif // CityHash #if CDS_BUILD_BITS == 64 @@ -87,6 +131,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_hp_city64; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_dhp_city64; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_rcu_gpi_city64; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_rcu_gpb_city64; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_rcu_gpt_city64; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_rcu_shb_city64; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city64 > MultiLevelHashMap_rcu_sht_city64; +#endif struct traits_MultiLevelHashMap_city64_stat : public traits_MultiLevelHashMap_city64 { @@ -94,6 +145,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_hp_city64_stat; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_dhp_city64_stat; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_rcu_gpi_city64_stat; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_rcu_gpb_city64_stat; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_rcu_gpt_city64_stat; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_rcu_shb_city64_stat; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city64_stat > MultiLevelHashMap_rcu_sht_city64_stat; +#endif struct traits_MultiLevelHashMap_city128 : public cc::multilevel_hashmap::traits { @@ -102,6 +160,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_hp_city128; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_dhp_city128; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_rcu_gpi_city128; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_rcu_gpb_city128; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_rcu_gpt_city128; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_rcu_shb_city128; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city128 > MultiLevelHashMap_rcu_sht_city128; +#endif struct traits_MultiLevelHashMap_city128_stat : public traits_MultiLevelHashMap_city128 { @@ -109,6 +174,13 @@ namespace map2 { }; typedef MultiLevelHashMap< cds::gc::HP, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_hp_city128_stat; typedef MultiLevelHashMap< cds::gc::DHP, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_dhp_city128_stat; + typedef MultiLevelHashMap< rcu_gpi, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_rcu_gpi_city128_stat; + typedef MultiLevelHashMap< rcu_gpb, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_rcu_gpb_city128_stat; + typedef MultiLevelHashMap< rcu_gpt, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_rcu_gpt_city128_stat; +#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED + typedef MultiLevelHashMap< rcu_shb, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_rcu_shb_city128_stat; + typedef MultiLevelHashMap< rcu_sht, Key, Value, traits_MultiLevelHashMap_city128_stat > MultiLevelHashMap_rcu_sht_city128_stat; +#endif #endif // CDS_BUILD_BITS == 64 }; diff --git a/tests/unit/map2/map_type_skip_list.h b/tests/unit/map2/map_type_skip_list.h index 37a5ad05..a20aa984 100644 --- a/tests/unit/map2/map_type_skip_list.h +++ b/tests/unit/map2/map_type_skip_list.h @@ -27,6 +27,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = true; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; struct tag_SkipListMap; diff --git a/tests/unit/map2/map_type_split_list.h b/tests/unit/map2/map_type_split_list.h index 3a807253..76853610 100644 --- a/tests/unit/map2/map_type_split_list.h +++ b/tests/unit/map2/map_type_split_list.h @@ -36,6 +36,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = true; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; template diff --git a/tests/unit/map2/std_hash_map.h b/tests/unit/map2/std_hash_map.h index 312f5357..0530cc02 100644 --- a/tests/unit/map2/std_hash_map.h +++ b/tests/unit/map2/std_hash_map.h @@ -102,6 +102,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = false; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; } // namespace map2 diff --git a/tests/unit/map2/std_map.h b/tests/unit/map2/std_map.h index cbcbc6df..477afdb5 100644 --- a/tests/unit/map2/std_map.h +++ b/tests/unit/map2/std_map.h @@ -92,6 +92,7 @@ namespace map2 { // for testing static CDS_CONSTEXPR bool const c_bExtractSupported = false; static CDS_CONSTEXPR bool const c_bLoadFactorDepended = false; + static CDS_CONSTEXPR bool const c_bEraseExactKey = false; }; } // namespace map